2017-04-12 133 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

完美谢谢!我只是发现它自己啊哈 –

相关问题