2012-05-19 47 views
1

我在對員工的考勤SQL表中的兩bit類型列,並留下像1 for Medical Leave or 2 for Paid Leave類型,它的值是一樣,SQL組,皈依

FirstHalfLeave Type  SecondHalfLeave Type 
------------ ----  ------------- ---- 
     0(Absent) 1    1    2 
     1(Present) 1    1    2 

我需要總結這些兩個字段,使其離開一天,我需要像dislay

Type   Days 
    ----   ------ 
MedicalLeave  0.5 
PaidLeave  1.0 

爲了這個,我試過像

select cast(
     sum(
      (
       CAST(StaffAttendance.FirstHalfStatus as Integer) + 
       CAST(StaffAttendance.SecondHalfStatus as integer) 
      ) 
      /2.0 
     ) as float 
    ) as TotalLeave 
    ,case when StaffAttendance.FirstHalfLeaveType = 2 OR 
StaffAttendance.SecondHalfLeaveType=2 then 'Paid Leave' 
    else 'Medical Leave' 
    end as Status 
from StaffAttendance 
where MONTH(StaffAttendance.date)=MONTH(GetDate()) 
group by StaffAttendance.FirstHalfLeaveType,StaffAttendance.SecondHalfLeaveType 
確切的結果

,但它不是很好的分組,我不知道如何做到這一點,任何人都可以幫助我在這裏,在此先感謝

回答

2
SELECT SUM(sa.LeaveDays)/COUNT(sa.LeaveDays),sa.Status 
FROM 
    (
     SELECT CAST(FirstHalfStatus AS FlOAT) LeaveDays,CASE WHEN FirstHalfLeaveType=2 THEN 'Paid Leave' ELSE 'Medical Leave' END as Status,date 
     FROM StaffAttendance   
     UNION ALL 
     SELECT CAST(SecondHalfStatus AS FlOAT),CASE WHEN SecondHalfLeaveType=2 THEN 'Paid Leave' ELSE 'Medical Leave' END as Status,date 
     FROM StaffAttendance 
    ) AS sa 
WHERE MONTH(sa.date)=MONTH(GetDate()) 
GROUP BY sa.Status 
+0

的Shahriar感謝,我會檢查它 – shanish

+1

有時'SUM(sa.LeaveDays)/ COUNT (sa.LeaveDays)'也可以縮寫爲'AVG(sa.LeaveDays)'。 :) –

+1

@AndriyM 100%權利。 AVG()縮短。但我忘了使用縮短的。 :) –