日期:2014-05-18  浏览次数:20626 次

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

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


如何用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
*/