统计报表时的查询

有表数据结构如下

NO    Class  Sex
01001 三年级 男
01002 三年级 女
01003 三年级 女
01004 四年级 男
01005 四年级 男
01006 五年级 女
01007 六年级 女

得到如下结果集:

 年级       男    女    count
三年级      1      2      3
四年级      2      0      2
五年级      0      1      1
六年级      0      1      1
总计        3      4      7

SELECT Class,SUM(CASE WHEN Sex='' THEN 1 ELSE 0 END),
         SUM(CASE WHEN Sex='' THEN 1 ELSE 0 END)
FROM A GROUP BY Class

这都很简单,但麻烦的是,Sex不固定,也就是说,还可能有人妖,等不固定的性别字段。

所以要用循环了,所以要用游标了,要先查出Sex所有的字段。然后用游标遍历结果集,循环拼接字符串。

declare @Sex varchar(50)
declare @sql varchar(500)
set @sql='SELECT Class,'
Declare mycursor cursor for select sex from Test group by sex
open mycursor fetch next from mycursor into @Sex
while(@@FETCH_STATUS=0)
begin
if(@Sex='' or @Sex=NULL)
set @Sex='未配置'
SET @sql+='SUM(CASE WHEN Sex='''+@Sex+''' THEN 1 ELSE 0 END)'+@sex+','
fetch next from mycursor into @Sex
end
close mycursor deallocate mycursor 

select @sql=substring(@sql,1,len(ltrim(rtrim(@sql)))-1)

set @sql+=' FROM Test GROUP BY Class'
EXEC(@sql)
原文地址:https://www.cnblogs.com/Archosaur/p/SQL.html