报表问题(在线等,先谢过啦)sql,c#
就是假设有这样一个表
table A
ID NAME DATE COUNT
1 大一 2007-01-01 40
2 大二 2007-01-01 30
3 大一 2007-01-01 10
4 大二 2007-01-02 11
变成这样的一个表,按月统计的:
NAME smu(count(date= '2007-1-1 ')) 2007-1-2 2007-1-3 ... 2007-1-31
1 大一 50
2 大二 30 11
请教各位高手,怎么做啊,
我不知道自己有没有分,下回给啊,不好意思
------解决方案----------------------如果DATE是字符型
Declare @S Varchar(8000)
Select @S = 'Select NAME '
Select @S = @S + ' , SUM(Case [DATE] When ' ' ' + [DATE] + ' ' ' Then [COUNT] Else 0 End) As [ ' + [DATE] + '] '
From A Group By [DATE]
Select @S = @S + ' From A Group By NAME '
EXEC(@S)
------解决方案----------------------上面为静态的SQL,下面为动态的SQL.
if object_id( 'pubs..tb ') is not null
drop table tb
go
create table tb
(
NAME varchar(10),
DATE datetime,
[COUNT] int
)
insert into tb(NAME,DATE,[COUNT]) values( '大一 ', '2007-01-01 ', 40)
insert into tb(NAME,DATE,[COUNT]) values( '大二 ', '2007-01-01 ', 30)
insert into tb(NAME,DATE,[COUNT]) values( '大一 ', '2007-01-01 ', 10)
insert into tb(NAME,DATE,[COUNT]) values( '大二 ', '2007-01-02 ', 11)
go
declare @sql varchar(8000)
set @sql = 'select name '
select @sql = @sql + ' , sum(case convert(varchar(10),date,120) when ' ' ' + convert(varchar(10),date,120) + ' ' ' then [count] else 0 end) [ ' + convert(varchar(10),date,120) + '] '
from (select distinct date from tb) as a
set @sql = @sql + ' from tb group by name '
exec(@sql)
drop table tb
/*
name 2007-01-01 2007-01-02
---------- ----------- -----------
大二 30 11
大一 50 0
(所影响的行数为 2 行)
*/