0

我有 3 张桌子:

  1. 产品大师
  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 BYTY.TrnYearTrnMonth列应该如何与结果中的 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 回答