报表分析
我有一张表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)
[解决办法]
create table A(序号 int, 品名 nvarchar(10), 数量 int, 日期 datetime)
insert A select 1, '产品1 ', 20, '2006-12-9 '
union all select 2, '产品1 ', 10, '2006-12-15 '
union all select 3, '产品2 ', 15, '2006-11-23 '
union all select 4, '产品3 ', 12, '2006-11-24 '
union all select 5, '产品4 ', 10, '2007-01-4 '
union all select 6, '产品6 ', 10, '2007-01-8 '
union all select 7, '产品6 ', 15, '2007-01-7 '
declare @sql varchar(8000)
set @sql= 'select 品名, '
select @sql=@sql+quotename(日期)+ '=sum(case when convert(char(7), 日期, 120)= '+quotename(日期, ' ' ' ')+ ' then 数量 else 0 end), ' from
(
select 日期=convert(char(7), 日期, 120)
from A
group by convert(char(7), 日期, 120)
)tmp
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from A group by 品名 '
exec(@sql)
--result
品名 2006-11 2006-12 2007-01
---------- ----------- ----------- -----------
产品1 0 30 0
产品2 15 0 0
产品3 12 0 0
产品4 0 0 10
产品6 0 0 25