现有下表:
姓名 考勤日期 考勤类型
小明 7-20 迟到
小红 7-21 早退
小明 7-22 迟到
小红 7-19 旷工
小明 7-18 迟到用一条SELECT语句得到下表:
姓名 迟到天数 早退天数 旷工天数
小明 3 0 0
小红 0 1 1
姓名 考勤日期 考勤类型
小明 7-20 迟到
小红 7-21 早退
小明 7-22 迟到
小红 7-19 旷工
小明 7-18 迟到用一条SELECT语句得到下表:
姓名 迟到天数 早退天数 旷工天数
小明 3 0 0
小红 0 1 1
迟到天数=sum(case when 考勤类型 in (N'迟到',N'早退') then 1 else 0 end) ,
早退天数=sum(case when 考勤类型 in (N'早退') then 1 else 0 end),
旷工天数=sum(case when 考勤类型 in (N'旷工') then 1 else 0 end)
from tb
group by 姓名
迟到天数=sum(case when 考勤类型 in (N'迟到') then 1 else 0 end) ,
早退天数=sum(case when 考勤类型 in (N'早退') then 1 else 0 end),
旷工天数=sum(case when 考勤类型 in (N'旷工') then 1 else 0 end)
from tb
group by 姓名
迟到天数=sum(case when 考勤类型 in (N'迟到') then 1 else 0 end) ,
早退天数=sum(case when 考勤类型 in (N'早退') then 1 else 0 end),
旷工天数=sum(case when 考勤类型 in (N'旷工') then 1 else 0 end)
from tb
group by 姓名
迟到天数=count(case when 考勤类型 in (N'迟到',N'早退') then 考勤类型 end) ,
早退天数=count(case when 考勤类型 in (N'早退') then 考勤类型 end),
旷工天数=count(case when 考勤类型 in (N'旷工') then 考勤类型 end)
from tb
group by 姓名
,迟到天数=sum(case when 考勤类型 in (N'迟到') then 1 else 0 end)
,早退天数=sum(case when 考勤类型 in (N'早退') then 1 else 0 end)
,旷工天数=sum(case when 考勤类型 in (N'旷工') then 1 else 0 end)
from tb
group by 姓名
迟到天数=sum(case when 考勤类型 in (N'迟到') then 1 else 0 end) ,
早退天数=sum(case when 考勤类型 in (N'早退') then 1 else 0 end),
旷工天数=sum(case when 考勤类型 in (N'旷工') then 1 else 0 end)
from tb
group by 姓名
---------------------------------
-- Author: htl258(Tony)
-- Date : 2009-07-21 10:53:19
---------------------------------
--> 生成测试数据表:tbIf not object_id('[tb]') is null
Drop table [tb]
Go
Create table [tb]([姓名] nvarchar(2),[考勤日期] nvarchar(4),[考勤类型] nvarchar(2))
Insert tb
Select '小明','7-20','迟到' union all
Select '小红','7-21','早退' union all
Select '小明','7-22','迟到' union all
Select '小红','7-19','旷工' union all
Select '小明','7-18','迟到'
Go
--Select * from tb-->SQL查询如下:
select 姓名,
迟到天数=count(case when 考勤类型 in (N'迟到') then 考勤类型 end) ,
早退天数=count(case when 考勤类型 in (N'早退') then 考勤类型 end),
旷工天数=count(case when 考勤类型 in (N'旷工') then 考勤类型 end)
from tb
group by 姓名
/*
姓名 迟到天数 早退天数 旷工天数
---- ----------- ----------- -----------
小红 0 1 1
小明 3 0 0(2 行受影响)
*/