SQL Server:生成空行?

时间:2012-01-17 10:58:37

标签: sql sql-server-2008 tsql

祝贺所有人。

我有一个SQL Server 2008 Express数据库,其中包含一个名为tbl_Sales的表,类似如下:

Merchant | Sales |  Month
Comp.1      100     201101
Comp.1      200     201102
Comp.2      130     201102
Comp.1      250     201103
Comp.2      130     201103
Comp.3      240     201103
             .
             .
             .
Comp.3      340     201111
Comp.2      240     201112
Comp.3      140     201112

我想在MVC3图表中生成以下数据。

但该图表每隔几个月就需要所有商家的数据冲突。

因此,SQL有一种方法可以执行以下结果:

Merchant | Sales |  Month
Comp.1      100     201101
Comp.2        0     201101
Comp.3        0     201101
Comp.1      200     201102
Comp.2      130     201102
Comp.3        0     201102
Comp.1      250     201103
Comp.2      130     201103
Comp.3      240     201103
             .
             .
             .
Comp.3      340     201111
Comp.1        0     201112
Comp.2      240     201112
Comp.3      140     201112

我们可以让另一张表tbl_Merchant列出我们需要的所有商家,如下所示:

Merchant 
Comp.1
Comp.2
Comp.3
  .
  .
  .
Comp.10

欢迎任何建议。

非常感谢。

1 个答案:

答案 0 :(得分:2)

是 - 进行商家到月的笛卡尔加入报告(以便每个商家获得每个月的行),然后将其加入数据表 - 如下所示:

select mth.[Month], mct.Merchant, coalesce(s.Sales,0) Sales
from (select distinct [Month] from tbl_Sales) mth
cross join Merchant mct
left join tbl_Sales s 
       on mth.[Month] = s.[Month] and mct.Merchant = s.Merchant

(如果tbl_Sales特别大,从递归的CTE生成的月份列表中填充mth内联视图可能会更快,而不是从中选择必要的月份集。销售数据。)