是否可以在 SQL 中有条件地 return 字段?

Is it possible to return fields conditionally in SQL?

如果任务在 time/on 时间非常 late/late/near,我想构建一个 returns 的查询。

任务状态: 如果 -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 : 预测日期和实现日期之间的差异 => returns 这两个日期之间的天数

它returns :

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

我认为我的方法不好,那么我对 returns 任务状态的选择是什么?

也许是这样的……(fiddle 会有所帮助 - 这尚未经过测试)

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)