Eri*_*Ely 1 sql join left-join
我试图在SQL中连接两个表,一个包含项目列表,另一个包含它们的销售日期.我得到了连接部分,但是我需要从REPORT表中获取信息,但是需要VENDORS表中的所有项目.我需要将未售出的商品显示为NULL,或者最好是0.这是我目前使用的代码,它只显示在给定日期销售的商品.
SELECT t2.[DATE]
,t1.[VENDOR]
,t1.[UPC]
,t2.[QTY]
,t2.[AMOUNT]
FROM [STORESQL].[dbo].[VENDORS] t1
LEFT OUTER JOIN [STORESQL].[dbo].[REPORT] t2 ON t1.UPC=t2.UPC
WHERE VENDOR='119828' AND DATE='2011-11-8'
Run Code Online (Sandbox Code Playgroud)
表的例子是
商贩:
VENDOR UPC
119828 1
119828 2
119828 3
Run Code Online (Sandbox Code Playgroud)
报告:
DATE UPC QTY AMOUNT
2011-11-8 1 1 9.99
2011-11-8 3 2 18.98
Run Code Online (Sandbox Code Playgroud)
导致当前代码
DATE VENDOR UPC QTY AMOUNT
2011-11-8 119828 1 1 9.99
2011-11-8 119828 3 2 18.98
Run Code Online (Sandbox Code Playgroud)
我需要它来展示
DATE VENDOR UPC QTY AMOUNT
2011-11-8 119828 1 1 9.99
2011-11-8 119828 2 0 0.00
2011-11-8 119828 3 2 18.98
Run Code Online (Sandbox Code Playgroud)
我知道我做错了什么,但我不知道那是什么.提前致谢.
试试这个:
SELECT t2.[DATE]
,t1.[VENDOR]
,t1.[UPC]
,t2.[QTY]
,t2.[AMOUNT]
FROM [STORESQL].[dbo].[VENDORS] t1
LEFT OUTER JOIN [STORESQL].[dbo].[REPORT] t2 ON t1.UPC=t2.UPC AND DATE='2011-11-8'
WHERE VENDOR='119828'
Run Code Online (Sandbox Code Playgroud)
针对DATE的where子句使您的外连接充当内连接,因为比较将在DATE中与空值相对.将比较移动到ON子句应该处理.
要获得0而不是null,您可以使用COALESCE:
,COALESCE(t2.[QTY], 0)
,COALESCE(t2.[AMOUNT], 0)
Run Code Online (Sandbox Code Playgroud)
您的日期列也将为空,也可以使用COALESCE修复:
COALESCE(t2.[DATE], '2011-11-8')
Run Code Online (Sandbox Code Playgroud)