读书人

三维数据统计解决办法

发布时间: 2012-03-15 11:50:38 作者: rapoo

三维数据统计
有这样一个数据表

姓名 年龄 出生年 年级 系别 专业
.. .. .. .. .. ..


如何用sql语句生成这样一个查询结果来统计人数

年龄 18 19 20
系别

生物 300

英语

30代表生物专业19岁的有20人,如何实现?


[解决办法]
declare @sql varchar(8000)
set @sql = 'select 系别 '
select @sql = @sql + ',sum(case 年龄 when ' ' '+年龄+ ' ' '
then 1 else 0 end) as ' ' '+年龄+ ' ' ' '
from (select distinct 年龄 from test) as a
select @sql = @SQL + ' from test group by 系别 '
exec(@sql)
go
差不多是这样
[解决办法]
if object_id( 'tbTest ') is not null
drop table tbTest
GO
create table tbTest (姓名 varchar(10),年龄 int, 系别 varchar(10))
insert tbTest
select '张三 ',21, '英语 ' union all
select '李四 ',22, '英语 ' union all
select '王五 ',22, '生物 ' union all
select '赵六 ',22, '生物 ' union all
select '马七 ',21, '生物 ' union all
select '冯八 ',23, '化学 '

----查询
declare @sql varchar(8000)
set @sql = 'select 系别 '
select @sql = @sql + ',[ ' + rtrim(年龄) + ']=sum(case 年龄 when ' + rtrim(年龄) + ' then 1 else 0 end) '
from tbTest group by 年龄
EXEC(@sql + ' from tbTest group by 系别 ')

drop table tbTest


/*结果
系别 21 22 23
---------- ----------- ----------- -----------
化学 0 0 1
生物 1 2 0
英语 1 1 0
*/

读书人网 >SQL Server

热点推荐