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

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

Linda Hamilton
發布: 2025-01-05 02:02:41
原創
875 人瀏覽過

How to Transpose Rows to Columns in SQL Server?

在SQL Server 中將行轉置為列

處理表格資料時,將行轉置為列可能是一種有用的轉換。在 SQL Server 中,有多種方法可以完成此任務,具體取決於特定要求。

條件聚合

一種方法是使用條件聚合。當預先知道列數時,此方法適用。透過使用巢狀 CASE 語句,您可以根據特定條件指定要為每列檢索的值。下面的查詢示範了條件聚合:

SELECT TimeSeconds,
       COALESCE(MAX(CASE WHEN TagID = 'A1' THEN Value END), 'n/a') A1,
       COALESCE(MAX(CASE WHEN TagID = 'A2' THEN Value END), 'n/a') A2,
       COALESCE(MAX(CASE WHEN TagID = 'A3' THEN Value END), 'n/a') A3,
       COALESCE(MAX(CASE WHEN TagID = 'A4' THEN Value END), 'n/a') A4
  FROM table1
 GROUP BY TimeSeconds
登入後複製

PIVOT 運算子

另一個選項是使用 PIVOT 運算子。此運算符可讓您根據鍵值將行旋轉為列。以下查詢使用 PIVOT 轉置行:

SELECT TimeSeconds, A1, A2, A3, A4
  FROM
(
  SELECT TimeSeconds, TagID, Value
    FROM table1
) s
PIVOT
(
  MAX(Value) FOR TagID IN (A1, A2, A3, A4)
) p
登入後複製

動態 SQL

如果列數不固定或動態決定,則可以利用動態 SQL SQL。此方法涉及根據可用 TagID 值建立 SQL 查詢字串並動態執行它。下面的程式碼提供了一個範例:

DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX)

SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(TagID)
            FROM Table1
            ORDER BY 1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)'),1,1,'')

SET @sql = 'SELECT TimeSeconds, ' + @cols + '
              FROM
            (
              SELECT TimeSeconds, TagID, Value
                FROM table1
            ) s
            PIVOT
            (
              MAX(Value) FOR TagID IN (' + @cols + ')
            ) p'

EXECUTE(@sql)
登入後複製

這些技術提供了在 SQL Server 中將行轉置為列的各種方法。最適當的方法取決於資料的性質和任務的特定要求。

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

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