首頁 > 資料庫 > mysql教程 > 如何使用動態 SQL 將 DB2 中的行轉換為列?

如何使用動態 SQL 將 DB2 中的行轉換為列?

Patricia Arquette
發布: 2024-12-31 19:35:10
原創
811 人瀏覽過

How to Pivot Rows into Columns in DB2 Using Dynamic SQL?

使用動態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中文網其他相關文章!

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