日期:2014-05-19  浏览次数:20651 次

报表分析

我有一张表A
序号       品名       数量     日期
1             产品1       20         2006-12-9
2             产品1       10         2006-12-15
3             产品2       15         2006-11   23
4             产品3       12         2006-11-24
5             产品4       10         2007-01-4
6             产品6       10         2007-01-8
7             产品6       15         2007-01-7

我用SQL按月份累加了
select   品名,数量=sum(数量,DATEPART(month,   日期)   as   月份   from   A   group   by   品名,DATEPART(month,   开单日期)
效果如下:
序号       品名     数量       月份
1             产品1       30           12
2             产品2       15           11
3             产品3       12           11
4             产品4       10           1
5             产品6       25           1      
我现在想输入格式为:
品名       12月份       11月份         1月份
产品1       30               0                   0
产品2         0               15                 0
产品3         0               12                 0
产品4         0               0                   10
产品6         0               0                   25
请问这样的SQL要怎么写?
不知在C#里用水晶报表能否做到?

------解决方案--------------------
create table tab
(
DateClass varchar(10),
Class varchar(20),
count varchar(20)
)
insert into tab select '产品1 ', '30 ', '12 '
insert into tab select '产品2 ', '15 ', '11 '
insert into tab select '产品3 ', '12 ', '11 '
insert into tab select '产品4 ', '10 ', '1 '
insert into tab select '产品5 ', '25 ', '1 '


--语句
declare @sql varchar(2000)
set @sql = 'select DateClass '

select @sql = @sql + ',sum(case count when ' ' '+a.count+ ' ' ' then class else 0 end )as [ '+a.count+ '月] '
from (select distinct count from tab)a

set @sql = @sql + ' from tab group by DateClass '

exec(@sql)
------解决方案--------