现有下表:
姓名    考勤日期     考勤类型  
小明     7-20          迟到
小红     7-21          早退
小明     7-22          迟到
小红     7-19          旷工
小明     7-18          迟到用一条SELECT语句得到下表:
姓名          迟到天数    早退天数     旷工天数  
小明             3              0              0
小红             0              1              1

解决方案 »

  1.   

    select 姓名,
    迟到天数=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 姓名
      

  2.   

    select 姓名,
    迟到天数=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 姓名
      

  3.   

    select 姓名,
    迟到天数=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 姓名
      

  4.   

    select 姓名,
    迟到天数=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 姓名
      

  5.   

    select 姓名
    ,迟到天数=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 姓名
      

  6.   

    select 姓名,
    迟到天数=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 姓名
      

  7.   


    ---------------------------------
    --  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 行受影响)
    */