2017-01-13 2 views
0

私はしないでください(メインカテゴリ年2016集約(または所望の結果のための他のソリューション)後に特定のデータを抽出

のために特定の「main_category」の合計「販売」を選択します私が登場する他のすべての「main_categories」(つまり、任意の販売を持っていない)と特定の「メインカテゴリ」の「売上高」を選択するために管理している

)その年の売上高がゼロとして表示されます持っています以下のクエリを使用してゼロとして返します。

SELECT 
    mc.name, 
    ISNULL(SUM(s.no_of_units * b.unit_price),0) AS tCatSales 
FROM Sales s 
INNER JOIN Invoice i ON i.invoice_ID = s.invoice_id 
INNER JOIN Inventory inv ON inv.inventory_ID = s.inventory_ID 
INNER JOIN Batch b ON b.batch_ID = inv.batch_ID 
INNER JOIN Products p ON p.product_id = b.product_ID 
INNER JOIN Category c ON c.category_ID = p.category_id 
RIGHT JOIN Main_Category mc ON mc.cat_id = c.main_category 
--WHERE YEAR(i.trans_date) = 2016 
GROUP BY mc.name 
--HAVING YEAR(i.trans_date)=2016 

が、私はさらに句または HAVING句のいずれかによって年間2016用ONLYを、それを分離しようとすると、それは年にゼロ販売を持っている「main_category」の名前を示す停止します。と INNER JOIN Invoice i ON i.invoice_ID = s.invoice_id

:私は考えることができる

ことの一つは、ラインを交換

、私だけのようなものを実行していたことを試みた2016 からクエリの請求書を与えることです:表示CAをした INNER JOIN Invoice i ON i.invoice_ID IN (SELECT invoice_id FROM Invoice in2 WHERE Year(in2.trans_date)=2016)

ゼロ値で計算されたが、計算された販売金額は(2069から何か203151022.75まで)である。

私はこの追加が幾分非合理的であり、インナー結合全体を混乱させることを理解していますが、これは私が思う、またはウェブ上で見つけることができる最も近いものです。

私は望ましい結果があるREPEAT:その年の売上高は年間与えられた年/月/日とゼロとして表示されますがありません主なカテゴリを

+1

クエリをポストして、他の人がそれを解決することを期待することは起こりそうにありません。ここで本当に役立つ情報が必要です。これは始めるのに最適な場所です。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ Where句をそのまま使用すると、クエリロジック全体が変更されます一致する行のみを返します。私は全体のクエリを開始し、あなたのベーステーブルとしてMain_Categoryを使用します。その後、他のすべてのものを結合します。右の結合は経験豊富な人でさえ混乱させますが、他の人にとってはまったく混乱します。 –

+0

なぜ右に参加するのですか? – Eli

答えて

0

を参照し、検索引数可能ではありませんRIGHT JOINを推奨されていません、あなたはJOINを左、次のようにサブクエリを使用するように変更することがあります。 はまた、のようなものがあることに注意してください。

SELECT 
    mc.name, 
    tCatSales = ISNULL(
     (
     SELECT 
      SUM(s.no_of_units * b.unit_price) AS tCatSales 
     FROM Sales s 
     INNER JOIN Invoice i ON i.invoice_ID = s.invoice_id 
     INNER JOIN Inventory inv ON inv.inventory_ID = s.inventory_ID 
     INNER JOIN Batch b ON b.batch_ID = inv.batch_ID 
     INNER JOIN Products p ON p.product_id = b.product_ID 
     INNER JOIN Category c ON c.category_ID = p.category_id  
     WHERE mc.cat_id = c.main_category 
      AND YEAR(i.trans_date) = 2016 
    ) , 0) 
FROM Main_Category mc 
+0

あなたのサブクラス作成の提案は、私の解決策に多少役立ちました。 –

0

これを試してみてください。

WHERE ISNULL(YEAR(i.trans_date), 1) = 2016 

外部結合に単純な等価条件を設定すると、ゼロ値の行が得られるゼロが削除されます。

WHERE YEAR(i.trans_date) = 2016 

、ショーンとイーライは、前述のようにhere

関連する問題