• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLについて)

SQLの明細テーブルでマスターからメッセージを取得する方法

このQ&Aのポイント
  • SQL SERVER2008の環境で、明細テーブルの挨拶項目にマスターA・Bからメッセージを取得する方法を教えてください。
  • Aマスターのメッセージを基本として、マスタBに合致する場合はマスタBのメッセージを取得したいです。
  • 具体的に取得したい結果は、明細テーブルのコードと対応するメッセージの組み合わせです。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.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で試したものですが・・・

waiwai5011
質問者

補足

解答ありがとうございます。 中々、文章だけで伝えるのは難しいですね。 一点、解答頂いたものに変更させて頂きたいのですが、詳細テーブルは三件までではなくAマスター分、N件になります。 その他の考え方は解答者様の記載された通です。 宜しくお願いいたします。 マスター追加に対応出来ない場合は、テーブル設計の見直して見ようかとも考えております。 お手数お掛けします。