我有这样一个关于教工考勤的数据表kq
记载者每个教工每年每月每天的缺勤情况
xm nian yue day1 day2.........day31
李明 2009 02  02  02............02
李红 2006 03  01 02  02 02 01 ....01
02代表病假
01 正常
请问我想求每个员工在某年某月出勤情况
比如李明,李红在 2009 02,2006,03 月出勤多少天,缺勤多少天
请问这样的功能我该怎么实现

解决方案 »

  1.   

    JGH varchar 30 0
    NIAN char 4 0
    YUE char 2 0
    DAY1 varchar 20 1
    DAY2 varchar 20 1
    DAY3 varchar 20 1
    DAY4 varchar 20 1
    DAY5 varchar 20 1
    DAY6 varchar 20 1
    DAY7 varchar 20 1
    DAY8 varchar 20 1
    DAY9 varchar 20 1
    DAY10 varchar 20 1
    DAY11 varchar 20 1
    DAY12 varchar 20 1
    DAY13 varchar 20 1
    DAY14 varchar 20 1
    DAY15 varchar 20 1
    DAY16 varchar 20 1
    DAY17 varchar 20 1
    DAY18 varchar 20 1
    DAY19 varchar 20 1
    DAY20 varchar 20 1
    DAY21 varchar 20 1
    DAY22 varchar 20 1
    DAY23 varchar 20 1
    DAY24 varchar 20 1
    DAY25 varchar 20 1
    DAY26 varchar 20 1
    DAY27 varchar 20 1
    DAY28 varchar 20 1
    DAY29 varchar 20 1
    DAY30 varchar 20 1
    DAY31 varchar 20 1
      

  2.   


    --mssql 2005
    select 
        xm,nian,yue,[date],[status] 
    into #temp
    from 
        kq
    unpivot 
        ([status] for [date] in([day1],[day2],[day3],...,[day31]))b--李明 在 2009 02出勤多少天 
    select count(1) from #temp where xm='李明' and nian='2009' and yue='02' and status='01'--李明 在 2009 02缺勤多少天 
    select count(1) from #temp where xm='李明' and nian='2009' and yue='02' and status='02'
      

  3.   

    你要把字段设置成datetime格式才好查询吧.
      

  4.   

    oracle的写法
    select xm,nian,yue,
    decode(day1,'01',1,0)+
    decode(day2,'01',1,0)+
    ......
    decode(day31,'01',1,0) as 出勤
    from tab
      

  5.   

    那我能问问您在sql2000中也能这样写吗
      

  6.   

    create     FUNCTION   queqinDays(@jgh varchar,@nian varchar @yue varchar)
    returns int as
    begin
     declare  @num int
    set @num=0
    declare @zt varchar
    for(int i=0;i<31;i++)
    {
      set @zt=(select dayi from kq_kqmx where jgh=@jgh and nian=@nian and yue=@yue)
    if(@zt<>'01')
    {
     set@num=@num+1
    }
    }
    end 
    return @num不好意啊在问您一下
    这是我自己写的函数请问错在哪里
      

  7.   

    dayi 不能这样写的,sql会认为dayi 是一个字段的名字,而不会分开解析
      

  8.   

    select xm,nian,yue,
    (case day1 when '01' then 1 else 0 end 
      +case day2 when '01' then 1 else 0 end
      +case day3 when '01' then 1 else 0 end
      +...
      +case day31 when '01' then 1 else 0 end) as 正常天数,
    (case day1 when '02' then 1 else 0 end 
      +case day2 when '02' then 1 else 0 end
      +case day3 when '02' then 1 else 0 end
      +...
      +case day31 when '02' then 1 else 0 end) as 请假天数
    where xm='李明' and nian='2009' and yue='02'
    试下