SQL Server 2008为表中缺少的日期插入新记录
我有两个sql表 表1列:产品,结束日期(例如:2014-01-31 00:00:00.000),销售金额 表2只有一列:EndDate(例如:2014-01-31 00:00:00.000) 第一个表列出了过去12个月每种产品的每月总销售额。 问题:某些产品一个月内没有任何销售,因此该产品当月的数据不会显示。我希望显示缺少的月份,销售金额为0 现在,表1中的数据如下所示: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
**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-只需使用插入到。。。选择…
并添加一个空检查——这应该可以做到: