sql查询横向展示并要列汇总
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中处理
--测试数据:
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.
------解决方案--------------------
declare @sql varchar(8000)
select @sql = isnull(@sql,'') + ',sum(case 名称 when ''' + 名称 + ''' then 数量 else 0 end) [' + 名称 + ']'
from (select distinct 名称 from tb) as a
set @sql = 'select 分部'+@sql + ' from tb group by 分部 union all select ''合计'''+@sql+' from tb'
exec(@sql)
------解决方案--------------------
4、5楼你们搞什么飞机啊,说了2000,一看就是动态,你们的都不符合
------解决方案--------------------
加序号一般是前台程序做的,不建议在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 分部 数学 物理 语文