2012-02-23 26 views
0

我有一個像加入同一個表中的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 

我該怎麼做?

+0

可能重複[加入一個表與自身(http://stackoverflow.com/questions/7794875/join-a-table-to-itself) – Ben 2012-02-23 13:35:45

+0

@Ben加入到本身是相似的,但在我必須從兩行創建一行。使用鑑別器。你可以試着寫下查詢,然後你就會明白我的意思 – Kayser 2012-02-23 13:38:02

+0

然後它是許多其他問題的重複。這些問題都被問過許多次:http://stackoverflow.com/search?q=poor+pivot+%5Btsql%5D – Ben 2012-02-23 13:45:34

回答

1

這可能不適用於使用自加入。這將會爲您發佈的數據進行工作:

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 

話又說回來,不僅查詢將失敗,但你的整個如果您有這樣的數據,業務規則將失敗。

+0

在每個類別中,我只能有一個值。這意味着在類別A中,abc只能存在一次。 – Kayser 2012-02-23 13:48:31

+0

另一個問題。我也對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

+0

它的工作原理。謝謝.. – Kayser 2012-02-23 14:34:44

1

此構造在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 
+0

感謝您的幫助。 – Kayser 2012-02-23 14:47:49