- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLについて)
SQLの明細テーブルでマスターからメッセージを取得する方法
このQ&Aのポイント
- SQL SERVER2008の環境で、明細テーブルの挨拶項目にマスターA・Bからメッセージを取得する方法を教えてください。
- Aマスターのメッセージを基本として、マスタBに合致する場合はマスタBのメッセージを取得したいです。
- 具体的に取得したい結果は、明細テーブルのコードと対応するメッセージの組み合わせです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
いろいろ不明な点が多いので、 ・マスタBの挨拶1~挨拶3は昇順に設定されている ・明細テーブルにはコード毎に3件までしかない ・マスタAからは明細テーブル内の最も小さい挨拶のメッセージを取得する という前提で勝手に作ってみました。 --全角スペースでインデントしています select t.コード,coalesce(mb.メッセージ,ma.メッセージ) メッセージ from ( select コード ,max(case when rnum = 1 then 挨拶 else null end) 挨拶1 ,max(case when rnum = 2 then 挨拶 else null end) 挨拶2 ,max(case when rnum = 3 then 挨拶 else null end) 挨拶3 from ( select tmp.*, row_number() over(partition by コード order by 挨拶) rnum from 明細テーブル tmp) group by コード) t inner join マスタA ma on (t.挨拶1 = ma.挨拶) left join マスタB mb on ( coalesce(t.挨拶1,'X') = coalesce(mb.挨拶1,'X') and coalesce(t.挨拶2,'X') = coalesce(mb.挨拶2,'X') and coalesce(t.挨拶3,'X') = coalesce(mb.挨拶3,'X')); SQL Serverの環境がないのでOracle10gで試したものですが・・・
補足
解答ありがとうございます。 中々、文章だけで伝えるのは難しいですね。 一点、解答頂いたものに変更させて頂きたいのですが、詳細テーブルは三件までではなくAマスター分、N件になります。 その他の考え方は解答者様の記載された通です。 宜しくお願いいたします。 マスター追加に対応出来ない場合は、テーブル設計の見直して見ようかとも考えております。 お手数お掛けします。