首頁 > 資料庫 > mysql教程 > 如何在 SQL Server 中將列轉換為行?

如何在 SQL Server 中將列轉換為行?

Patricia Arquette
發布: 2025-01-21 19:27:14
原創
518 人瀏覽過

How Can I Convert Columns to Rows in SQL Server?

SQL Server 中的列轉行轉換

將資料庫列轉換為行是資料分析和重組中的重要技術。在 SQL Server 中,可以透過多種方法實現這種轉換,每種方法都有其自身的優點和注意事項。

方法一:UNPIVOT 函數

UNPIVOT 函數原生支援列轉行轉換。 UNPIVOT 的語法如下:

<code class="language-sql">UNPIVOT (indicatorvalue FOR indicatorname IN (Indicator1, Indicator2, Indicator3, ...)) AS unpiv</code>
登入後複製

範例:

<code class="language-sql">SELECT id, entityId,
  indicatorname,
  indicatorvalue
FROM yourtable
UNPIVOT
(
  indicatorvalue
  FOR indicatorname IN (Indicator1, Indicator2, Indicator3)
) unpiv;</code>
登入後複製

方法二:使用 UNION ALL 的 CROSS APPLY

使用 UNION ALL 的 CROSS APPLY 是另一種將列轉換為行的方法。它基於提供的列迭代地組合行:

<code class="language-sql">SELECT id, entityid,
  indicatorname,
  indicatorvalue
FROM yourtable
CROSS APPLY
(
  SELECT 'Indicator1', Indicator1 UNION ALL
  SELECT 'Indicator2', Indicator2 UNION ALL
  SELECT 'Indicator3', Indicator3 UNION ALL
  SELECT 'Indicator4', Indicator4
) c (indicatorname, indicatorvalue);</code>
登入後複製

方法三:使用 VALUES 的 CROSS APPLY

此方法利用 CROSS APPLY 中的 VALUES 子句來指定列名與值:

<code class="language-sql">SELECT id, entityid,
  indicatorname,
  indicatorvalue
FROM yourtable
CROSS APPLY
(
  VALUES
  ('Indicator1', Indicator1),
  ('Indicator2', Indicator2),
  ('Indicator3', Indicator3),
  ('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);</code>
登入後複製

方法四:動態 SQL

對於需要解旋大量列的場景,動態 SQL 可以自動化此過程:

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

SELECT @colsUnpivot 
  = STUFF((
      SELECT ',' + QUOTENAME(C.column_name)
      FROM INFORMATION_SCHEMA.COLUMNS AS C
      WHERE C.table_name = 'yourtable' AND
            C.column_name LIKE 'Indicator%'
      FOR XML PATH('')
  ), 1, 1, '')

SET @query 
  = 'SELECT id, entityId,
        indicatorname,
        indicatorvalue
      FROM yourtable
      UNPIVOT
      (
        indicatorvalue
        FOR indicatorname IN (' + @colsUnpivot + ')
      ) u'

EXEC sp_executesql @query;</code>
登入後複製

透過為您的特定場景選擇最合適的方法,您可以有效率地在 SQL Server 中執行列轉行轉換。

以上是如何在 SQL Server 中將列轉換為行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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