也許有人可以闡明,我一直在爭奪與整個一天:)使用3臺與狀態檢查一個棘手的SQL語句
聲明一些光我有3個表
假日
holidayID | userID | dateFrom | dateTo
1 | 1 | 2012-01-01 | 2012-01-01
2 | 1 | 2012-01-15 | 2012-01-20
狀態
statusID | holidayID | statusText
1 | 1 | accepted
2 | 2 | declined
個
UserSettings
id | userID | HolidaysAllowed
1 | 1 | 20
我所試圖做的是得到以下結果
結果
HolidaysAllowed | HolidaysLeft (Allowed - Taken) | HolidaysTaken (Sum of Holidays)
20 | 19 | 1
我能夠得到所有三列,如果我不狀態狀態 - 這裏是我得到的最接近的
SELECT
IFNULL(SUM(IF( h.dateTo = h.dateFrom, 1, DATEDIFF(h.dateTo, h.dateFrom))), 0) AS holidaysTaken,
IFNULL(us.HolidaysAllowed - (SUM( IF( h.DateTo = h.DateFrom, 1, DATEDIFF(h.DateTo, h.dateFrom)))), 0) AS holidaysLeftover,
us.HolidaysAllowed
FROM userSettings us
LEFT JOIN holiday h
ON h.userID = 1
JOIN status s
ON s.holidayID = h.holidayID AND s.statusID = 1
WHERE
us.userID = 1
GROUP BY h.userID;
主要問題是,如果沒有statusID爲2的節假日,則結果列1 & 2爲0(這是正確的),但列3(HolidaysAllowed)爲NULL(不正確,因爲它總是需要返回值表UserSettings)。上面的查詢只有當有至少一條記錄(假期)具有正確的狀態時才返回正確的響應......我做錯了什麼? :)
它只是驅使我堅果:)預先感謝任何幫助!非常感激!
UPDATE
謝謝大家誰評論...該預期的結果如下 把那有狀態的所有假期= 1(即接受),然後計算假期的統計數據,防止讓假期。即在總
20天,1個假期接受= 19天的時間採取
再次感謝
你可以張貼一些示例數據和所需的O/P – Teja 2012-04-28 20:49:07
@Vutukuri - 感謝您的意見。 ..我已經更新了我的問題。 Siva ... statusID可以有n種可能性。 – Stevanicus 2012-04-28 22:02:29
週末的日子呢?我們應該假設週六/週日不計數? – 2012-04-28 22:15:21