SQL Server 2008在表中插入缺少日期的新记录

时间:2014-12-17 22:33:48

标签: sql sql-server

我有两个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

我怎样才能做到这一点。

感谢您的帮助。

1 个答案:

答案 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