首頁 > 資料庫 > mysql教程 > 如何在SQL中有效率地轉置列和行?

如何在SQL中有效率地轉置列和行?

Linda Hamilton
發布: 2025-01-23 09:47:14
原創
694 人瀏覽過

How Can I Efficiently Transpose Columns and Rows in SQL?

SQL 欄位與行轉置:實用指南

SQL 通常需要轉置資料 - 將表格方向從垂直(列)轉換為水平(行)或相反。雖然存在 PIVOT 命令,但它可能很麻煩。 本指南探討了更簡單的替代方案。

方法 1:UNION ALL、聚合和 CASE 語句

此方法使用 UNION ALL 進行逆透視,然後使用聚合函數(此處為 SUM)和 CASE 語句進行逆透視:

<code class="language-sql">select name,
  sum(case when color = 'Red' then value else 0 end) Red,
  sum(case when color = 'Green' then value else 0 end) Green,
  sum(case when color = 'Blue' then value else 0 end) Blue
from
(
  select color, Paul value, 'Paul' name
  from yourTable
  union all
  select color, John value, 'John' name
  from yourTable
  union all
  select color, Tim value, 'Tim' name
  from yourTable
  union all
  select color, Eric value, 'Eric' name
  from yourTable
) src
group by name</code>
登入後複製

方法2:靜態UNPIVOT和PIVOT

知道要轉換的列數可以實現靜態 UNPIVOTPIVOT 解:

<code class="language-sql">select name, [Red], [Green], [Blue]
from
(
  select color, name, value
  from yourtable
  unpivot
  (
    value for name in (Paul, John, Tim, Eric)
  ) unpiv
) src
pivot
(
  sum(value)
  for color in ([Red], [Green], [Blue])
) piv</code>
登入後複製

方法3:變數列的動態透視

在處理動態數量的列和顏色時,動態 SQL 提供了一個解決方案:

<code class="language-sql">DECLARE @colsUnpivot AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX),
    @colsPivot as  NVARCHAR(MAX)

select @colsUnpivot = stuff((select ','+quotename(C.name)
         from sys.columns as C
         where C.object_id = object_id('yourtable') and
               C.name <> 'color'
         for xml path('')), 1, 1, '')

select @colsPivot = STUFF((SELECT  ',' 
                      + quotename(color)
                    from yourtable t
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


set @query 
  = 'select name, '+@colsPivot+'
      from
      (
        select color, name, value
        from yourtable
        unpivot
        (
          value for name in ('+@colsUnpivot+')
        ) unpiv
      ) src
      pivot
      (
        sum(value)
        for color in ('+@colsPivot+')
      ) piv'

exec(@query)</code>
登入後複製

這些方法提供了在 SQL 中進行資料轉置的通用方法,適應各種資料操作需求。

以上是如何在SQL中有效率地轉置列和行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板