」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > SQL Server中如何高效地將列轉換為行?

SQL Server中如何高效地將列轉換為行?

發佈於2025-04-13
瀏覽:407

How Can I Efficiently Convert Columns to Rows in SQL Server?

SQL Server中列轉行的深度指南

當處理包含大量指標列的表時,將這些列轉換為行對於分析和報告目的非常有利。此轉換涉及重新構建數據以創建具有不同架構的新表。

問題陳述

考慮以下表架構:

[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]

目標是將這些指標列轉換為行,從而創建一個具有以下架構的新表:

[ID] [EntityId] [IndicatorName] [IndicatorValue]

使用UNPIVOT的解決方案

完成此任務的一種優雅解決方案是利用UNPIVOT函數。 UNPIVOT的語法如下:

UNPIVOT ([unpivot column] FOR [pivot column] IN ([pivot values]))

在本例中,unpivot列表示指標值(例如,“Indicator1”、“Indicator2”等),而pivot列表示列名本身。以下查詢說明瞭如何使用UNPIVOT:

select id, entityId,
  indicatorname,
  indicatorvalue
from yourtable
unpivot
(
  indicatorvalue
  for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;

通過執行此查詢,指標列將轉換為行,指標名稱和值將填充新列。

替代方案

除了UNPIVOT之外,還有其他方法可以將列轉換為行:

  • 使用UNION ALL的CROSS APPLY:此方法涉及使用CROSS APPLY和UNION ALL來顯式指定每個指標名稱和值。
  • 使用VALUES的CROSS APPLY:與上述方法類似,但在CROSS APPLY中使用了VALUES子句。
  • 動態SQL:對於具有大量指標列的情況,可以使用動態SQL自動生成查詢語句。

解決方案的選擇取決於具體的需要和使用的SQL Server版本。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3