簡體   English   中英

在DB2中旋轉

[英]Pivoting in DB2

我必須將行轉換為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

有點掙扎的查詢,請您幫忙嗎?

它不是很漂亮,但是應該可以。 DB2沒有像SQL Server這樣的內置PIVOT功能。

SELECT DISTINCT
     A.ItemID
    ,(SELECT value
      FROM table B
      WHERE B.ItemID = A.ItemID
        AND B.Item   = 'Meeting'
    ) AS Meeting
    ,(SELECT value
      FROM table B
      WHERE B.ItemID = A.ItemID
        AND B.Item   = 'Advise'
    ) AS Advise
    ,(SELECT value
      FROM table B
      WHERE B.ItemID = A.ItemID
        AND B.Item   = 'NoAdvise'
    ) AS NoAdvise
FROM table A

bhamby當前接受的答案當然是正確的,但是值得檢查使用多個相關子查詢是否比單個查詢慢得多 (提示:很可能是):

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

我認為這也更簡單

SQLFiddle (在PostgreSQL中,但也適用於DB2 LUW)

正如@bhamby所說,DB2沒有PIVOT功能。
通常,我的查詢在檢索結果的方式上有所不同-您需要對它們運行分析器/優化器以確保結果,但是我相信相關子查詢可能按行執行(可能效率較低),而不是集合。 對於小型數據集,這不太可能成為問題。

WITH Item (id) as (SELECT DISTINCT itemId
                   FROM YourTable),
SELECT item.id, Meeting.meeting, Advise.advise, NoAdvise.noadvise
FROM Item
LEFT JOIN (SELECT itemId, value as meeting
           FROM YourTable
           WHERE item = 'Meeting') as Meeting
       ON Meeting.itemId = Item.id
LEFT JOIN (SELECT itemId, value as advise
           FROM YourTable
           WHERE item = 'Advise') as Advise
       ON Advise.itemId = Item.id
LEFT JOIN (SELECT itemId, value as noadvise
           FROM YourTable
           WHERE item = 'NoAdvise') as NoAdvise
       ON NoAdvise.itemId = Item.id

(...,實際上,我有點擔心您同時具有“建議”和“不建議”列,這似乎是某種布爾條件-即,您應該有一個,但沒有另一個) 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM