举例:一个单位有A个车间,每个车间有B个生产小组,按性别统计各个车间中每个小组的人数表格式:  人名   所属小组   所属车间   性别输出:  车间  小组名称  总人数    男   女
  A1    A1B1        5       2    3
  A1    A1B2        6       1    5
  A2    A2B1        4       2    2
  A2    A2B2        7       3    4像这种的SQL查询语句怎么写啊?头大啊!!!

解决方案 »

  1.   

    select 所属车间,所属小组,count(*) as 总人数,
    sum(case 性别 when '男' then 1 end) as 男,
    sum(case 性别 when '女' then 1 end) as 女
    from 表
    group by 所属车间,所属小组
      

  2.   

    SELECT 所属车间 车间,
           所属小组 小组名称,
           COUNT(1) 总人数,
           SUM(CASE 性别 WHEN '男' THEN 1 ELSE 0 END) 男,
           SUM(CASE 性别 WHEN '女' THEN 1 ELSE 0 END) 女
    FROM TB
    GROUP BY 所属车间,所属小组
      

  3.   

    case when 比较好用 呵呵
      

  4.   

    select
        所属车间 as 车间,
        所属小组 as 小组名称,
        count(1) 总人数,
        sum(case 性别 when '男' then 1 else 0 end) as  男,
        sum(case 性别 when '女' then 1 else 0 end) as  女
    from 
        tb
    group by
        所属车间,所属小组
      

  5.   

    SELECT 所属车间 车间,
           所属小组 小组名称,
           COUNT(1) 总人数,
           SUM(CASE 性别 WHEN '男' THEN 1 ELSE 0 END) 男,
           SUM(CASE 性别 WHEN '女' THEN 1 ELSE 0 END) 女
    FROM TB
    GROUP BY 所属车间,所属小组SELECT 所属车间 车间,
           所属小组 小组名称,
           总人数 = (SELECT COUNT(1) FROM TB WHERE 所属车间 = T.所属车间 AND 所属小组 = T.所属小组) ,
           男 = isnull((SELECT COUNT(1) FROM TB WHERE 所属车间 = T.所属车间 AND 所属小组 = T.所属小组 AND 性别 = '男'),0) ,
           女 = isnull((SELECT COUNT(1) FROM TB WHERE 所属车间 = T.所属车间 AND 所属小组 = T.所属小组 AND 性别 = '女'),0)
    FROM TB
    GROUP BY 所属车间,所属小组
      

  6.   

    select 所属车间,所属小组,count(*) as 总人数,
        sum(case 性别 when '男' then 1 end) as 男,
        sum(case 性别 when '女' then 1 end) as 女
    from 表
    group by 所属车间,所属小组
      

  7.   

    select
        所属车间 as 车间,
        所属小组 as 小组名称,
        sum(1) 总人数,
        sum(case 性别 when '男' then 1 else 0 end) as  男,
        sum(case 性别 when '女' then 1 else 0 end) as  女
    from tb
    group by 所属车间,所属小组