0

こんにちは、2 か月の合計日数を見つけて、1 か月ごとに日数を分割したいと考えています..たとえば、2 月 26-02-2013 から 3-3-2013 は、2 日間の休暇を示していますが、3 月はそうではありません。合計休暇を表示します..これは私のクエリです..誰でも私のクエリを修正できますか..2月のみが表示されます.3月はここには表示されません..

SELECT  month(fdate) as Month_Number
        , datename(month, fdate) as Month
        , case when month(fdate) <> month(tdate) then 
            datediff(day, fdate, DATEADD(month, ((YEAR(fdate) - 1900) * 12) + MONTH(fdate), -1)) 
          else 
            datediff(day, fdate, tdate) 
          end as Leaves 
from    test 
where   empid like '112'
4

1 に答える 1

0

これを試してください。各月の日数が表示されます。

SELECT  *
        , DATEADD(DAY, -1, DATEADD(MONTH, DATEDIFF(MONTH, 0, t.fdate) + 1, 0)) Last_In_Month_Of_Beginning
        , DATEADD(MONTH, DATEDIFF(MONTH, 0, t.tdate), 0) First_In_Month_Of_End
INTO    #temp1
FROM    test t
WHERE   empid LIKE '112'

SELECT  number Month_Number
        , CASE 
            WHEN MONTH(fdate) = MONTH(tdate) THEN DATEDIFF(DAY, fdate, tdate) - 1
            WHEN MONTH(Last_In_Month_Of_Beginning) = number THEN DATEDIFF(DAY, fdate, Last_In_Month_Of_Beginning)
            WHEN MONTH(First_In_Month_Of_End) = number THEN DATEDIFF(DAY, First_In_Month_Of_End, tdate)
          END Leave
INTO    #temp2
FROM    #temp1 a
JOIN    master..spt_values v ON
        v.type = 'P'
AND     v.number BETWEEN MONTH(a.Last_In_Month_Of_Beginning) AND MONTH(a.First_In_Month_Of_End)

SELECT  Month_Number
        , SUM(Leave) Leaves
FROM    #temp2
GROUP BY Month_Number

これがSQLフィドルです

于 2013-02-11T10:52:54.693 に答える