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

SQL Server 2008为表中缺少的日期插入新记录,sql,sql-server,Sql,Sql Server,我有两个sql表 表1列:产品,结束日期(例如:2014-01-31 00:00:00.000),销售金额 表2只有一列:EndDate(例如:2014-01-31 00:00:00.000) 第一个表列出了过去12个月每种产品的每月总销售额。 问题:某些产品一个月内没有任何销售,因此该产品当月的数据不会显示。我希望显示缺少的月份,销售金额为0 现在,表1中的数据如下所示: **Product EndDate SaleAmt** TireMC 12/31/2013 5600 T

我有两个sql表 表1列:产品,结束日期(例如:2014-01-31 00:00:00.000),销售金额 表2只有一列:EndDate(例如:2014-01-31 00:00:00.000)

第一个表列出了过去12个月每种产品的每月总销售额。 问题:某些产品一个月内没有任何销售,因此该产品当月的数据不会显示。我希望显示缺少的月份,销售金额为0

现在,表1中的数据如下所示:

**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日期与Table2日期进行比较,将Table2中缺少的日期放入table1中的每个产品的table1中,并将SalesAmt保留为空

**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
我怎样才能做到这一点


提前感谢您的帮助。

如果我正确理解您的问题,您正在查找第二个表中所有日期的
笛卡尔积,第一个表中包含所有产品。您可以使用
交叉联接来创建它。然后,您需要使用
外部联接
获取sames amt的结果,使用
合并
将空值转换为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

此选择为我提供了所需的结果,但如何将每个产品缺少的日期记录放回表1?@svon-只需使用
插入到。。。选择…
并添加一个空检查——这应该可以做到: