首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

报表有关问题(,先谢过啦)sql,c

2012-01-22 
报表问题(在线等,先谢过啦)sql,c#就是假设有这样一个表tableAIDNAMEDATECOUNT1大一2007-01-01402大二2007-

报表问题(在线等,先谢过啦)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 行)
*/

热点排行