统计报表时的查询
有表数据结构如下
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)