メインコンテンツへスキップ

2つの伝票を月別に金額集計して、同じ月は1行で表現するSQL文

コメント

5件のコメント

  • nkmt

    先程の例ですと

    201904,50000,100000

    201905,80000,30000 のように。

     

    2つのGROUPIN SUMのSQL文をJOINするのではなく

    受注伝票を主のSQL文にして、売上集計をJOINする方法も試しましたが

    受注が無く、売上だけがある月の売上は表示されないと思いまして、いいやり方を知りたいです。

  • nkmt

    > 2つのGROUPIN SUMのSQL文をJOINするのではなく

    ↑訂正します。

    受注伝票のGROUPING SUMと

    売上伝票のGROUPING SUMをUNIONでくっつけるのではなく

     

    受注伝票を主のGROUPING SUMにして、

    売上伝票のGROUPING SUM をJOINする方法も試しましたが

    受注が無く、売上だけがある月の売上は表示されないと思いまして。

     

     

  • kitabayashi

    完全外部結合(FULL OUTER JOIN)でうまくいくと思います。

    SQL Serverでは単にJOINすると、FULL JOINになります。
    (DBMSによってFULL JOINの記述方法は異なります。)

  • nkmt

    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へ出力して、表示するようにするので逃げましょうかね。

     

  • nkmt

    お陰様で社内の詳しい方からアドバイスを頂き解決いたしました。

    受注伝票のグルーピングSUMと

    売上伝票のグルーピングSUMを

    UNION ALL で合体し、

    それらを全部外側からSELECT FROMで囲い

    別名にした「年月」でGROUP by して、受注金額をSUM、売上金額をSUMいたしました。

    もう半年から1年ぐらい集計物はSQL文でしか作っておりません。

サインインしてコメントを残してください。