プロが教える店舗&オフィスのセキュリティ対策術

SQLの表結合についてですが、以下のような2つのテーブルを結合する場合、

表A
ID,RENBAN,NO,NO1,NO2
1,1,1,1,0
1,2,2,1,2

表B
ID,KUBUN,NO,SYOUSAI_NO
1,1,1,11111
1,1,2,22222
1,2,1,33333
1,2,2,44444

表BのKUBUNが1の場合、
from 表A inner join 表B on 表A.ID = 表B.ID and 表A.NO = 表B.NO
表BのKUBUNが2の場合、
from 表A inner join 表B on 表A.ID = 表B.ID and 表A.NO1 = 表B.NO
および
from 表A inner join 表B on 表A.ID = 表B.ID and 表A.NO2 = 表B.NO
とした場合、以下の最終結果にしたいのですが・・・

ID,RENBAN,NO(SYOUSAI_NO),NO1(SYOUSAI_NO),NO2(SYOUSAI_NO)
1,1,11111,33333,
1,2,22222,33333,44444

そもそもこれは可能なのでしょうか?
意味わからなければ補足致します。
ご教示いただけますでしょうか?

A 回答 (1件)

表AのそれぞれのID & RENBANについて、3つのJOIN式に該当する表Bのデータがそれぞれ「2件以上ない」ことが保証されているテーブル構造であるなら、以下のクエリで可能です。


SELECT
a.ID,
a.RENBAN,
MAX(CASE WHEN b.KUBUN=1 AND b.NO=a.NO THEN b.SHOUSAI_NO END) "NO(SHOUSAI_NO)",
MAX(CASE WHEN b.KUBUN=2 AND b.NO=a.NO1 THEN b.SHOUSAI_NO END) "NO1(SHOUSAI_NO)",
MAX(CASE WHEN b.KUBUN=2 AND b.NO=a.NO2 THEN b.SHOUSAI_NO END) "NO2(SHOUSAI_NO)"
FROM 表A a
INNER JOIN 表B b ON b.ID=a.ID and
((b.KUBUN=1 AND b.NO=a.NO) OR (b.KUBUN=2 AND b.NO=a.NO1) OR (b.KUBUN=2 AND b.NO=a.NO2))
GROUP BY a.ID,a.RENBAN
ORDER BY 1,2

このように表示する意味はわかりませんが、可能は可能です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!