表结构如下:            周次     学号      迟到      旷课     请假     早退
                       
           1        001       true     false      false    false           1        009       false     true      false    false           1        011       true     false      false    false           1        021       true     false      false    false           2        002       false     false     false     true           2        012       false     false     false     true           2        032       false     false     false     true           3        004       false     true     false     false求解怎么用count统计每周迟到旷课早退请假的人数并且和group by 按周次进行分组,生成如下效果的表:           周次     迟到人数  旷课人数  早退人数  请假人数 
            
            1              3            1              0             0            2              0            0              3             0            3              0            1              0             0
求解啊, 谢谢

解决方案 »

  1.   


    SELECT [周次],[迟到人数]=COUNT(迟到),[旷课人数]=COUNT(旷课)...
    FROM 表
    WHERE 迟到='true' and 旷课='true' and ....
    GROUP BY [周次]
      

  2.   

    if object_id('[TB]') is not null drop table [TB]
    go
    create table [TB] (周次 int,学号 nvarchar(6),迟到 nvarchar(10),旷课 nvarchar(10),请假 nvarchar(10),早退 nvarchar(10))
    insert into [TB]
    select 1,'001','true','false','false','false' union all
    select 1,'009','false','true','false','false' union all
    select 1,'011','true','false','false','false' union all
    select 1,'021','true','false','false','false' union all
    select 2,'002','false','false','false','true' union all
    select 2,'012','false','false','false','true' union all
    select 2,'032','false','false','false','true' union all
    select 3,'004','false','true','false','false'select * from [TB]SELECT 周次,SUM(迟到) AS 迟到,SUM(旷课) AS 旷课,
    SUM(请假) AS 请假,
    SUM(早退) AS 早退 
    FROM (
    SELECT 周次,学号,SUM(CASE WHEN 迟到 = 'true' THEN 1 ELSE 0 END) AS 迟到,
    SUM(CASE WHEN 旷课 = 'true' THEN 1 ELSE 0 END) AS 旷课,
    SUM(CASE WHEN 请假 = 'true' THEN 1 ELSE 0 END) AS 请假,
    SUM(CASE WHEN 早退 = 'true' THEN 1 ELSE 0 END) AS 早退
    FROM dbo.TB
    GROUP BY 周次,学号) T
    GROUP BY 周次/*
    周次 迟到 旷课 请假 早退
    1 3 1 0 0
    2 0 0 0 3
    3 0 1 0 0*/
      

  3.   


    with tb(a,b,c,d,e,f) as
    (select'1','001','true','false','false','false' union all select
           '1','009','false','true','false','false' union all select
           '1','011','true','false','false','false' union all select
           '1','021','true','false','false','false' union all select
           '2','002','false','false','false','true' union all select
           '2','012','false','false','false','true' union all select
           '2','032','false','false','false','true' union all select
           '3','004','false','true','false','false' 
    )
    select a 周次,count(case when c='true' then 1 else null end) 迟到人数,
    count(case when d='true' then 1 else null end) 旷课人数,
    count(case when e='true' then 1 else null end) 早退人数,
    count(case when f='true' then 1 else null end) 请假人数 from tb
    group by a