各位大侠:
请问:
  有一个数据表中的信息怎么实现统计
info表格结构如下:  身份证  班级   是否标记   
   111     a班    是
   222     a班    是
   333     b班    是
   444     b班    否查询info表格中各班标记为“是”的总数,和 "否"标记的总数,实现结果如下:
   是   否  班级
   2    0   a班
   1    1   b班怎么用SQL 语句完成,谢谢了

解决方案 »

  1.   

    本帖最后由 josy 于 2012-02-25 16:21:14 编辑
      

  2.   

    select sum(case when 是否标记 = '是' then 1 else 0 end) [是],
           sum(case when 是否标记 = '否' then 1 else 0 end) [否],
           班级
    from tb
    group by 班级
      

  3.   

    create table tb(身份证 varchar(10), 班级 varchar(10),是否标记 varchar(10))
    insert into tb values('111', 'a班', '是')
    insert into tb values('222', 'a班', '是')
    insert into tb values('333', 'b班', '是')
    insert into tb values('444', 'b班', '否')
    goselect sum(case when 是否标记 = '是' then 1 else 0 end) [是],
           sum(case when 是否标记 = '否' then 1 else 0 end) [否],
           班级
    from tb
    group by 班级drop table tb/*是           否           班级         
    ----------- ----------- ---------- 
    2           0           a班
    1           1           b班(所影响的行数为 2 行)
    */
      

  4.   

    大侠就是大侠呀
    在上面的表中,如果要从身份证信息中取出省份,用SQL能实现吗?
    比如:
      身份证 班级 是否标记   
      111 a班 是
      222 a班 是
      333 b班 是
      444 b班 否
    按下面输出结果:
      省份    班级  记录数
      黑龙江  a班    1
      安徽    a班    1
      江西    b班   2
       
    谢谢了
     
      

  5.   

    如果存在一个省份对应表省份对应表
    身份证 省份名称
    11    黑龙江
    22    安徽
    33    江西
    44    广东select m.省份名称 , n.班级 , count(1) 记录数
    from 省份对应表 m , tb n
    where m.身份证 = left(n.身份证,2)
    group by m.省份名称 , n.班级
    select m.省份名称 , n.班级 , 
           sum(case when n.是否标记 = '是' then 1 else 0 end) [是],
           sum(case when n.是否标记 = '否' then 1 else 0 end) [否],
           count(1) 总数
    from 省份对应表 m , tb n
    where m.身份证 = left(n.身份证,2)
    group by m.省份名称 , n.班级
      

  6.   


    if (object_id('info')) is not null
    drop table info
    go
    create table info(
    身份证 varchar(20),
    班级 varchar(20),
    标记 nchar(4)
    )
    go
    insert info(身份证,班级,标记)
    select '111','a班','是' union all
    select '222','a班','是' union all
    select '333','b班','是' union all
    select '444','b班','是' 
    select 班级,sum(case when 标记='是' then 1 else 0 end )as 是,
    sum(case when 标记='否' then 1 else 0 end )as 否
    from info
    group by 班级