DB2

2012-02-23 14 views
0

で同じテーブルに参加し、私はDB2

col1 col2 col3 
abc 123 A 
abc 345 B 
def 567 A 
ghi 890 B 

のようなテーブルは、私は要素に関連する1行のデータを持っていると思いますがあります。 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

+0

自体に参加@Benは類似しているが、その中にあります場合は、私は2つの行から1つの行を作成する必要があります。分別器を使って。あなたはそれが多くの他の質問の重複である – Kayser

+0

を意味するものを理解すると、クエリを書くとそれを試すことができます。どちらの質問にも何度も尋ねられています:http://stackoverflow.com/search?q=poor+pivot+%5Btsql%5D – Ben

答えて

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

各カテゴリには私は1つの値しか持てません。カテゴリAでは、abcは1回だけ存在することを意味します。 – Kayser

+0

別の質問です。私もcol1のconcat操作があります。私はどのようにしてグループで書くことができますか。私はそのようにしようとしました: 'select CONCAT( ''、col1)col1Modified、 max(大文字のcol3の場合は 'A'、次にcol2の場合はnullの終わり)col2A、 max(大文字の場合は 'B'、次にcol2の場合はnull)col2B YourTableから グループby col1Modified' – Kayser

+0

これは機能します。ありがとう.. – Kayser

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