2017-04-12 75 views
0

我想構建一個查詢,返回任務是否非常晚/晚/接近準時/準時。是否有可能在SQL中有條件地返回字段?

任務狀態: 早期如果-2天

附近的時間,如果-1天

末如果爲1天

改變後期如果2個天

我已經試過:

SELECT field_1, diff, 
COUNT(CASE WHEN diff <= -2 THEN 1 END) onTime, 
COUNT(CASE WHEN diff <= -1 THEN 1 END) nearOnTime, 
Count(CASE WHEN diff >= 2 THEN 1 END) veryLate, 
Count(CASE WHEN diff >= 0 THEN 1 END) Late 
FROM(
    SELECT field_1, DATEDIFF(day,Max(predicted_date), realization_date) as diff 
    FROM table 
    Group by field_1, realization_date 
    HAVING end_date is not null) as req1 
GROUP BY field_1, diff) 

diff:預測的d吃和實現日期 =>返回天的這兩個日期

它返回的數字:

field_1 | diff | onTime | nearOnTime | veryLate | Late 
---------+--------+----------+--------------+------------+------- 
task1 | -3 |  1 |  1  |  0  | 0 
task2 | 2 |  0 |  0  |  1  | 1 

我覺得我的做法是不好的,所以是什麼或者是我的選擇,返回的任務狀態?

回答

3

可能沿着這些路線的..東西(小提琴將幫助 - 這還沒有經過測試)

SELECT field_1, diff, 
CASE WHEN diff <= -2 THEN 'On Time', 
WHEN diff <= -1 THEN 'nearOnTime', 
WHEN diff >= 2 THEN 'veryLate', 
WHEN diff >= 0 THEN 'Late' 
else 'OK' END as status 
FROM(
    SELECT field_1, DATEDIFF(day,Max(predicted_date), realization_date) as diff 
    FROM table 
    Group by field_1, realization_date 
    HAVING end_date is not null) as req1 
GROUP BY field_1, diff) 
+0

完美謝謝!我只是發現它自己啊哈 –

相關問題