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)
  • 相关阅读:
    Centos7安装Redis-单节点
    解决物理机U盘安装Kali Linux2018.1,光驱无法加载问题
    做销售如何跟单,逼单!共20招!(转)
    销售沟通技巧(转)
    rails gem (2015-07-16)
    Foundation
    Redis TTL 为0
    Introspection反射机制
    will_paginate
    Linux下Rsync+Inotify-tools实现数据实时同步
  • 原文地址:https://www.cnblogs.com/Archosaur/p/SQL.html
Copyright © 2011-2022 走看看