• 締切済み

sqlについて

下に書いたsqlのコードの内容(どういう処理でどういう結果になるのか)が知りたいです。 どなたかわかる方教えてください。 select b.ym, b.no,     isnull(e.sumcnt,0)as val, null as bunsi, null as bunbo from (select distinct ym,no from Table_A)b inner join (select ym from Table_B where cd=1)d on b.ym=d.ym left outer join (select b1.ym,b1.no,sum(c1.cnt)as sumcnt from Table_A b1 inner join (select ym from Table_B where cd=1)d1 on b1.ym=d1.ym inner join Table_C c1 on b1.ym=c1.ym group by b1.ym,b1no)e on b.ym=e.ym and b.no=e.no

みんなの回答

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

「どういう結果になるのか」は基本的にANo.1への補足どおりだと思いますけれど。 付け加えるとするなら Table_A.ym=Table_B.ym は満たすけれどそれに対応する Table_C.ym 値が存在しない行に対しても結果は出力される(※1)。その場合の Table_C.cntの集計値はゼロが出力される(※2)ということでしょうか。 ※1 left outer join ※2 isnull()関数

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

ym, no, cd, cnt の各列に格納されている値は何なのか。 Table_A, Table_B, Table_C の3表の役割は何が違うのか。 そういう前提の説明をまったくせずに他人に理解してほしいのなら, 列名・表名にしっかり意味を持たせてコードを書いてください。

nakatanakanaka
質問者

補足

すみません。補足説明です。 ym=年月日, no=店の番号(数値), cd=コード(数値), cnt=件数(数値) まず、 ym と no が key となってます。 Table_B は no を持ってません。 Table_B の cd='1' であるもので、 Table_A の ym(年月日) と Table_B の ym(年月日)で一致する年月日を取得して、 Table_A.ym=Table_C.ym and Table_A.no=Table_C.no の条件で Table_C.cnt を集計したいです。 よろしくお願いいたします・・・

関連するQ&A