zoukankan      html  css  js  c++  java
  • 统计报表时的查询

    有表数据结构如下

    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)
  • 相关阅读:
    Python 文件批量改名
    解决 unity 生成 android apk read Resources
    IIS 重定向 自动追加 eurl.axd 后缀
    多线程
    zookeeper面试
    线程之间的通信(thread signal)
    软考高项之计算题成本类计算
    PowerDesigner PDM 复制comment到name
    软考高项之计算题进度类
    全面理解Java内存模型
  • 原文地址:https://www.cnblogs.com/Archosaur/p/SQL.html
Copyright © 2011-2022 走看看