2017-10-22 8 views
0

一部の販売情報を分析しようとしていますが、SQLクエリが機能しません。私はまだSQLを正しく使う方法を学ぶので、私はたぶん標準的な解決策を見ていないでしょう。月間売上を強制的に修正する正しい方法

私はデータベース内のすべての記事のリストを希望し、それぞれの月の売上を表示します。販売されていない月は0でリストされます。

Iは、一つのテーブルで販売されている実際の商品別のおよび第3のテーブルで注文情報を物品情報を格納しています。

私の問題は今、何とか空になっているように見えて、私はフィルターを取り出せません。 さらに、日付を持つ他のテーブルを参照すると、既存の値/行に結合するのではなく、日付値が "mulitply"になります(reportMonthの各月に12行が残されます)。

これは私のコードです:

//* list of months */ 
WITH dates(reportMonth) as (
    select 1 union all select 2 union all 
    select 3 union all select 4 union all 
    select 5 union all select 6 union all 
    select 7 union all select 8 union all 
    select 9 union all select 10 union all 
    select 11 union all select 12 
    ) 


SELECT article.articleno AS 'article_no' 
    , month(beleg.orderdate) 
    , dates.reportMonth 

    , ISNULL(sum(orders_pos.amount), 0) 
     AS 'VK_amount' 

FROM article 
    CROSS JOIN dates 
    LEFT JOIN orders_pos ON article.articleno = orders_pos.articleno 
    LEFT JOIN orders ON orders_pos.beleg_id = orders.id 
     AND ISNULL(month(orders.orderdate), 0) != 0 
     AND month(orders.orderdate) = dates.reportMonth 

GROUP BY article.artikelnr 
    , month(orders.orderdate) 
    , dates.reportMonth 

これはこれは私が

article_no month(beleg.orderdate) reportMonth VK_amount 
Produkt_A       1   1 
Produkt_A       2   0 
Produkt_A       3   0 
Produkt_A 4      4   1 
Produkt_A 5      5   2 
Produkt_A       6   0 
Produkt_A 7      7   3 
Produkt_A 8      8   2 
Produkt_A       9   0 
Produkt_A 10      10   2 
Produkt_A       11   0 
Produkt_A       12   0 

誰かがここに助けるかもしれないという考えを持っていますが必要になるかである現在の出力

article_no month(beleg.orderdate) reportMonth VK_amount 
Produkt_A        1    5 
Produkt_A        2    9 
Produkt_A        3    7 
Produkt_A        4    5 
Produkt_A        5    5 
Produkt_A        6    7 
Produkt_A        7    5 
Produkt_A        8    7 
Produkt_A        9    7 
Produkt_A        10    6 
Produkt_A        11    7 
Produkt_A        12    7 
Produkt_A  1       1    1 
Produkt_A  4       4    1 
Produkt_A  5       5    2 
Produkt_A  7       7    3 
Produkt_A  8       8    2 

です? 私の事件を理解するためにさらに詳しい情報が必要な場合は、私にお知らせください。

答えて

0

GROUP BYの集計列がSELECTの列と一致しないため、クエリが機能しません。おそらく適切なクエリが役に立ちます:

SELECT a.articleno AS article_no, month(o.orderdate), d.reportMonth, 
     COALESCE(sum(op.amount), 0) as VK_amount 
FROM article a CROSS JOIN 
    dates d LEFT JOIN 
    orders_pos op 
    ON a.articleno = op.articleno LEFT JOIN 
    orders o 
    ON op.beleg_id = o.id AND 
     month(o.orderdate) = d.reportMonth -- is there a condition on year? 
GROUP BY a.artikelnr, month(o.orderdate), d.reportMonth 
ORDER BY a.artikelnr, month(o.orderdate), d.reportMonth 
+0

あなたの答えはありがとう。 'GROUP BY'では、実際にはこの例をまとめることができませんでした。私は私のテキストでこれを編集しました。 WHERE文で特定の日付範囲を選択するので、ここでは年の条件は必要ありませんが、この例では必要ありません。 – Mirakelwhip

関連する問題