我有一個像加入同一個表中的DB2
col1 col2 col3
abc 123 A
abc 345 B
def 567 A
ghi 890 B
表我想有相關的元素一個行的數據。 Col3是鑑別器元素。只有'A'和'B'行是相關的。結果應該看起來像
col1 col2A col2B
abc 123 345
def 567 --
ghi -- 890
我該怎麼做?
我有一個像加入同一個表中的DB2
col1 col2 col3
abc 123 A
abc 345 B
def 567 A
ghi 890 B
表我想有相關的元素一個行的數據。 Col3是鑑別器元素。只有'A'和'B'行是相關的。結果應該看起來像
col1 col2A col2B
abc 123 345
def 567 --
ghi -- 890
我該怎麼做?
這可能不適用於使用自加入。這將會爲您發佈的數據進行工作:
select
col1,
max(case col3 when 'A' then col2 else null end) col2A,
max(case col3 when 'B' then col2 else null end) col2B
from YourTable
group by col1
當然,如果你有一個像下面的數據,它會失敗:
col1 col2 col3
abc 123 A
abc 345 B
abc 567 A
話又說回來,不僅查詢將失敗,但你的整個如果您有這樣的數據,業務規則將失敗。
在每個類別中,我只能有一個值。這意味着在類別A中,abc只能存在一次。 – Kayser 2012-02-23 13:48:31
另一個問題。我也對col1進行了concat操作。我怎樣才能一組一組地寫。我試過這樣的:'select CONCAT('',col1)col1Modified, max(case'col3'when col2 else null end)col2A, max(case'col'when'B'then col2 else null end)col2B 來自YourTable group by col1Modified' – Kayser 2012-02-23 13:59:42
它的工作原理。謝謝.. – Kayser 2012-02-23 14:34:44
此構造在SQL Server中起作用。我沒有一個DB2實例可以方便地驗證它是否可以在那裏工作,但是語法是合理標準的。的
SELECT t0.col1, t1.col2 AS col2A, t2.col2 AS col2B
FROM (SELECT DISTINCT col1 FROM mytable) as t0 -- Select the list of keys
LEFT OUTER JOIN mytable t1 ON t0.col1=t1.col1 AND t1.col3='A' -- Join for col2A
LEFT OUTER JOIN mytable t2 ON t0.col1=t2.col1 AND t2.col3='B' -- Join for col2B
感謝您的幫助。 – Kayser 2012-02-23 14:47:49
可能重複[加入一個表與自身(http://stackoverflow.com/questions/7794875/join-a-table-to-itself) – Ben 2012-02-23 13:35:45
@Ben加入到本身是相似的,但在我必須從兩行創建一行。使用鑑別器。你可以試着寫下查詢,然後你就會明白我的意思 – Kayser 2012-02-23 13:38:02
然後它是許多其他問題的重複。這些問題都被問過許多次:http://stackoverflow.com/search?q=poor+pivot+%5Btsql%5D – Ben 2012-02-23 13:45:34