首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sqlserver怎么实现同一个表中多个count查询并且分组

2013-01-04 
求助sqlserver如何实现同一个表中多个count查询并且分组表结构如下:周次学号迟到旷课请假早退1001truefals

求助sqlserver如何实现同一个表中多个count查询并且分组
表结构如下:

            周次     学号      迟到      旷课     请假     早退
                       
           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


求解啊, 谢谢
[解决办法]

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 周次

/*
周次迟到旷课请假早退
13100
20003
30100*/

热点排行
Bad Request.