考勤表
sysid     ktype        stime         
47         迟到         2006-1-1      
47         迟到         2006-1-2      
47         请假         2006-1-3      
48         迟到         2006-1-4      
48         病假         2006-1-5      姓名表
sysid        name
47             张三
48            李四我想得到以下结果
sysid    name    迟到     请假     病假
47        张三    2         1       0
48        李四    1         0        1

解决方案 »

  1.   

    select  a.sysid,
    a.name,
    迟到=sum(case when ktype='迟到' then 1 else 0 end),
    请假=sum(case when ktype='请假' then 1 else 0 end),
    病假=sum(case when ktype='病假' then 1 else 0 end)
    from 姓名表 a inner join 考勤表
    on a.sysid=b.sysid
    group by a.sysid,a.name
    order by a.sysid
      

  2.   

    select a.sysid,b.name,
    sum(case when ktype='迟到' then 1 else 0) as 迟到,
    sum(case when ktype='请假' then 1 else 0) as 请假,
    sum(case when ktype='病假' then 1 else 0) as 病假
    from 考勤表 a,姓名表 b
    where a.sysid=b.sysid
    group by a.sysid,b.name