使用動態SQL 將行轉換為DB2 中的欄位
目標是對錶中的資料進行透視,將行轉換為列,以獲得期望的輸出。考慮以下表結構:
源表
ItemID | Item | Value |
---|---|---|
1 | Meeting | Now |
1 | Advise | Yes |
1 | NoAdvise | No |
2 | Meeting | Never |
2 | Advise | No |
2 | NoAdvise | Null |
2 | Combine | Yes |
所需輸出
ItemID | Meeting | Advise | NoAdvise |
---|---|---|---|
1 | Now | Yes | No |
2 | Never | No | Null |
SQL使用關聯查詢子查詢
實現此轉換的一種方法是使用相關子查詢:
SELECT A.ItemID, MAX(CASE WHEN A.Item = 'Meeting' THEN Value END) AS Meeting, MAX(CASE WHEN A.Item = 'Advise' THEN Value END) AS Advise, MAX(CASE WHEN A.Item = 'NoAdvise' THEN Value END) AS NoAdvise FROM A GROUP BY A.ItemID
此查詢執行多個相關子查詢,每個所需的輸出列一個,以提取相應的值對於每一行。然後按 ItemID 欄位對結果進行分組以獲得透視輸出。
使用動態 SQL 的替代方法
另一個選擇是利用動態 SQL 建立資料透視表。這種方法具有更大的靈活性,並且可以進行自訂以產生所需的輸出列:
DECLARE @cols AS NVARCHAR(MAX), @sql AS NVARCHAR(MAX) SET @cols = '' SELECT @cols += ',MAX(CASE WHEN Item = ''' + Item + ''' THEN Value END) AS ' + Item FROM ( SELECT DISTINCT Item FROM A ) AS Items SET @sql = 'SELECT ItemID, ' + SUBSTRING(@cols, 2) + ' FROM A GROUP BY ItemID' EXEC (@sql)
此查詢根據Item 列中的不同值動態建構SQL 語句並執行它,產生透視輸出.
以上是如何使用動態 SQL 將 DB2 中的行轉換為列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!