SQL完全加入Where

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)

我知道我做错了什么,但我不知道那是什么.提前致谢.

Mik*_*son 5

试试这个:

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)