我有两个sql表 表1列:产品,Enddate(例如:2014-01-31 00:00:00.000),saleAmt 表2只有一列:EndDate(例如:2014-01-31 00:00:00.000)
第一个表格包含过去12个月内每种产品的TotalMonthly销售额。 问题:某些产品一个月没有任何销售,因此该月的产品不会显示该数据。我希望缺少的月份显示销售额为0
这就是现在数据在Table1中的显示方式:
**Product EndDate SaleAmt**
TireMC 12/31/2013 5600
TireMC 1/31/2014 800
TireMC 2/28/2014 2400
TireMC 7/31/2014 1600
TireMC 10/31/2014 4600
TireMC 11/30/2014 4200
我想将此table1 Date与Table2 Date进行比较,并将Table2中缺少的Dates与Table1中的每个Product相关联,并将SalesAmt保留为null。
**Product EndDate SaleAmt**
TireMC 12/31/2013 5600
TireMC 1/31/2014 800
TireMC 2/28/2014 2400
TireMC 3/31/2014 0
TireMC 4/30/2014 0
TireMC 5/31/2014 0
TireMC 6/30/2014 0
TireMC 7/31/2014 1600
TireMC 8/31/2014 0
TireMC 9/30/2014 0
TireMC 10/31/2014 4600
TireMC 11/30/2014 4200
我怎样才能做到这一点。
感谢您的帮助。
答案 0 :(得分:2)
如果我正确理解了您的问题,那么您正在寻找第二张表格中所有日期的cartesian product
以及第一张表格中的所有商品。您可以使用cross join
来创建它。然后,您需要使用outer join
来获取相同的结果,使用coalesce
将空值转换为0:
select t1.product, t2.enddate, coalesce(t3.saleamt,0) saleamt
from (select distinct product
from table1) t1
cross join (select distinct enddate
from table2) t2
left join table1 t3 on t1.product = t3.product
and t2.enddate = t3.enddate