MS SQL Server:使用 UNPIVOT 和 PIVOT 完成表格轉置
在 MS SQL Server 中轉置具有多列的表需要使用 UNPIVOT
和 PIVOT
函數的組合方法。 UNPIVOT
將多列重塑為行,而 PIVOT
將行值轉換回列。
逐步指南:
資料逆透視:
此步驟將列資料轉換為行。 將 yourtable
、A
、B
、value
和 col
替換為您的實際表和列名稱。
<code class="language-sql">SELECT day, col, value FROM yourtable UNPIVOT ( value FOR col IN (A, B) ) unpiv</code>
資料透視:
在這裡,行資料被旋轉回列。 調整 Mon
、Tue
、Wed
、Thu
、Fri
以符合您的特定欄位名稱(本例中為一週中的幾天)。
<code class="language-sql">SELECT * FROM (SELECT * FROM ...) src -- Replace ... with the UNPIVOT query from step 1 PIVOT ( MAX(value) FOR day IN (Mon, Tue, Wed, Thu, Fri) ) piv</code>
整合到現有查詢中:
要在現有查詢中轉置數據,請合併 UNPIVOT
和 PIVOT
操作:
<code class="language-sql">SELECT * FROM ( SELECT LEFT(DATENAME(dw, datetime), 3) AS DateWeek, col, value FROM DataTable CROSS APPLY ( VALUES ('A', ACalls), ('B', BCalls) ) c (col, value) ) src PIVOT ( SUM(value) FOR DateWeek IN (Mon, Tue, Wed, Thu, Fri) ) piv</code>
使用 PIVOT 和 CROSS APPLY 的範例(SQL Server 2008 及更高版本):
此範例利用 CROSS APPLY
提供更簡潔的解決方案。
<code class="language-sql">SELECT day, col, value FROM yourtable CROSS APPLY ( VALUES ('A', ACalls), ('B', BCalls) ) c (col, value) PIVOT ( MAX(value) FOR day IN (Mon, Tue, Wed, Thu, Fri) ) piv</code>
重要注意事項:
col
欄位顯示原始欄位名稱。 MAX()
函數可以根據您的資料需求替換為其他聚合函數(如SUM()
、AVG()
等)。 這份綜合指南示範如何有效地轉置 MS SQL Server 中的整個資料表,為各種資料操作場景提供彈性和適應性。
以上是如何使用 UNPIVOT 和 PIVOT 在 MS SQL 中轉置完整表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!