1

スタッフの出席のためにSQLテーブルに2つのbitタイプの列があり、休暇のタイプは次のよう1 for Medical Leave or 2 for Paid Leaveになり、その値は次のようになります。

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

これらの 2 つのフィールドを合計して 1 日を残す必要があり、次のような正確な結果を表示する必要があります。

  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

しかし、それはうまくグループ化されていません。これを行う方法がわかりません。誰かがここで私を助けてくれますか、事前に感謝します

4

1 に答える 1

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
于 2012-05-19T06:41:44.083 に答える