將資料庫列轉換為行是資料分析和重組中的重要技術。在 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中文網其他相關文章!