2つの伝票を月別に金額集計して、同じ月は1行で表現するSQL文
お世話になっております。またSQL文について教えてもらいたく投稿させて頂きました。
ある得意先1件のみ
受注伝票から、月別に受注金額を集計した分と
売上伝票から、月別に売上金額を集計した分を漏れなく同じ行で表示したいです。
年月、受注額、売上額 という結果にしたいです。
受注しかない月、売上しかない月もある想定です。
月別受注金額のGROUPING SUMと
月別売上金額のGROUPING SUMをUNIONで合体すると
201904, 0, 10000
201904, 50000, 0
201905, 0, 30000
201905, 80000, 0 のようになります。
同じ月を1行にする事は可能でしょうか?
-
先程の例ですと
201904,50000,100000
201905,80000,30000 のように。
2つのGROUPIN SUMのSQL文をJOINするのではなく
受注伝票を主のSQL文にして、売上集計をJOINする方法も試しましたが
受注が無く、売上だけがある月の売上は表示されないと思いまして、いいやり方を知りたいです。
-
> 2つのGROUPIN SUMのSQL文をJOINするのではなく
↑訂正します。
受注伝票のGROUPING SUMと
売上伝票のGROUPING SUMをUNIONでくっつけるのではなく
受注伝票を主のGROUPING SUMにして、
売上伝票のGROUPING SUM をJOINする方法も試しましたが
受注が無く、売上だけがある月の売上は表示されないと思いまして。
-
完全外部結合(FULL OUTER JOIN)でうまくいくと思います。
SQL Serverでは単にJOINすると、FULL JOINになります。
(DBMSによってFULL JOINの記述方法は異なります。) -
kitabayashi様 ありがとうございます。
FULL OUTER JOIN という記述があるのは初めて知りました。
まだやりたい事は実現されておりません。
受注伝票を得意先1件指定して、受注年月でグルーピング。
受注金額を月毎の計を出すSQL文に
売上伝票を、売上年月でグルーピングして、売上金額を月毎の計を出すSQL文を
LEFT JOIN といった使い方をよくしている部分を
FULL JOINしてみましたが、売上のみ存在する月の分は表示されませんでした。
ON句は以下の3つを試してみました。
・売上年月=LEFT(受注年月,6)
・売上.得意先CD=受注.得意先CD ← 250行ぐらい結果表示されてしまいました。
・売上年月=LEFT(受注年月,6) AND 売上.得意先CD=受注.得意先CD
受注集計の結果を年月をキーにしたWFへ出力、
売上集計の結果を年月をキーにしたWFへ出力して、表示するようにするので逃げましょうかね。
-
お陰様で社内の詳しい方からアドバイスを頂き解決いたしました。
受注伝票のグルーピングSUMと
売上伝票のグルーピングSUMを
UNION ALL で合体し、
それらを全部外側からSELECT FROMで囲い
別名にした「年月」でGROUP by して、受注金額をSUM、売上金額をSUMいたしました。
もう半年から1年ぐらい集計物はSQL文でしか作っておりません。
サインインしてコメントを残してください。
コメント
5件のコメント