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

sql查询横向展示并要列汇总

2013-03-25 
sql查询横向显示并要列汇总--测试数据:create table tb(分部 varchar(10) , 名称 varchar(10) , 数量 int)

sql查询横向显示并要列汇总
--测试数据:
create table tb(分部 varchar(10) , 名称 varchar(10) , 数量 int)
insert into tb values('上海' , '语文' , 74)
insert into tb values('上海' , '数学' , 83)
insert into tb values('上海' , '物理' , 93)
insert into tb values('南京' , '语文' , 74)
insert into tb values('南京' , '数学' , 84)
insert into tb values('南京' , '物理' , 94)
go
--下面是查询语句
declare @sql varchar(8000)
set @sql = 'select 分部 '
select @sql = @sql + ' , sum(case 名称 when ''' + 名称 + ''' then 数量 else 0 end) [' + 名称 + ']'
from (select distinct 名称 from tb) as a
set @sql = @sql + ' from tb group by 分部'
exec(@sql)


要实现效果是
分部    数学    物理    语文 
南京    84       94      74
上海    83       93      74
合计   167      187      148 
关键是最后一行合计怎么来用sql语句完成查询。我的数据库环境是sql2000. 4、5楼你们搞什么飞机啊,说了2000,一看就是动态,你们的都不符合
[解决办法]

引用:
引用:SQL code?12345declare @sql varchar(8000)select @sql = isnull(@sql,'') + ',sum(case 名称 when ''' + 名称 + ''' then 数量 else 0 end) [' + 名称 + ']'from (select distinct 名称 from ……

加序号一般是前台程序做的,不建议在SQL中处理
declare @sql varchar(8000)
 set @sql = 'select sno=identity(int,1,1),isnull(分部,''合计'') as 分部 '
select @sql = @sql + ' , sum(case 名称 when ''' + 名称 + ''' then 数量 else 0 end) [' + 名称 + ']'
from (select distinct 名称 from tb) as a
 set @sql = @sql + ' into ##tmp from tb group by 分部 with rollup'
exec(@sql)

select * from ##tmp
/**
sno         分部         数学          物理          语文


----------- ---------- ----------- ----------- -----------
1           南京         84          94          74
2           上海         83          93          74
3           合计         167         187         148

(3 行受影响)
**/


[解决办法]
引用:
我的当前环境是sql2000的。不支持这个函数。
set @sql = 'select IDENTITY(int,1,1) as id,* into # from (select 分部'+@sql + ' from tb group by 分部 union all select ''合计'''+@sql+' from tb)t;select * from #'

热点排行
Bad Request.