0

私は3つのテーブルを持っています:

  1. ProductMaster
  2. SalesTY(今年の売上)
  3. SalesLY(昨年の売上)

ProductMasterからすべての行を返し、次に今年の売上、そして昨年の売上を返すクエリを作成しようとしています。問題は、今年の一部の製品が新しく、昨年の一部の製品がもう入手できないことですが、すべての製品をリストする必要があるため、次のように表示する必要があります。

Product    TY       LY
aaaa       1000     0
bbbb       0        1000

私の質問:

select 
i.Product
,b1.TrnMonth
,b1.TrnYear
,b1.TY
,b2.LY
from Productmaster i
left join #ty b1
on i.Product = b1.Product
left join #ly b2
on i.Product = b2.Product
Group by i.Product
,b1.TrnMonth
,b1.TrnYear
4

2 に答える 2

0

あなたGROUP BYの とTY.TrnYearとのTrnMonth列が結果の LY テーブルにどのように関連するかは不明です。

それらを除外して、出力例(それらも除外)に進むと、次のクエリを使用します。

SELECT
    i.Product
    , COALESCE((Select SUM(TY) From #ty b1 Where i.Product = b1.Product), 0) As TY
    , COALESCE((Select SUM(LY) From #ly b2 Where i.Product = b2.Product), 0) As LY    
FROM Productmaster i

TY と LY を特別な条件なしで結合しないでください。結果の行が交差乗算されるためです。

于 2012-07-14T13:42:00.557 に答える
0

あなたが必要LEFT OUTER JOINだと思います。

于 2012-07-14T13:18:10.703 に答える