0
我试图实现在使用CASE
声明我的SQL查询ORDER BY
子句中的“自定义”排序,但它给了我一些时髦的订货订购在SQL
这里是我的ORDER BY
条款至今:
ORDER BY
CASE WHEN
CheckInStatus <> 'Cancelled' AND ArrivalTime is null AND GETDATE() > DATEADD(mi,30, CAST(StartDateTime AS DATETIME))THEN 1
WHEN
CheckInStatus <> 'Cancelled' AND ArrivalTime is null AND GETDATE() <= DATEADD(mi,30, CAST(StartDateTime AS DATETIME)) THEN 2
WHEN ArrivalTime is not null THEN 3
WHEN CheckInStatus='Cancelled' THEN 4
ELSE 5
END,
StartDateTime, ScanTechName
我想要做的就是为了查询如下:
的人谁没有到达(谁的约会不会取消)和当前时间比过去相比的开始时间30分钟大 - 这些男人应该先
的人谁没有到达(谁的约会不会取消)和当前时间小于或等于过去的开始时间30分钟 - 这些家伙出现第二
接下来是大家谁检查在
随后取消预约
最后则一切
所有的一切都将开始时间和名称
订购这个问题似乎与2和3发生。这些家伙似乎混在一起,我认为这可能与我的AND有关,但我不知道如何解决它。
下面是我在结果得到的错误 - 我已经包含在ORDER BY
的CASE
直观地看到这个问题
Arrival Time | CheckIn Status | StartDateTime | OrderStatus
----------------------------------------------------------------------------------
2014-08-15 08:00:07.123 | Arrived | 2014-08-15 07:15:00.000 | 3
----------------------------------------------------------------------------------
2014-08-15 07:47:48.643 | Arrived | 2014-08-15 07:30:00.000 | 2
那么一两件事情发生
- 由于我目前的GETDATE()是8/28/2014 - 上面不应该有2状态。由于它不小于或等于StartDate后的30分钟
- 由于这本身是错误的,因此可能会导致第二个问题 - 因为它被标记为2,所以应该在3之前出现。
将CASE语句移入SELECT子句,以便您可以清楚地看到结果。考虑分离ArrivalTime和CheckinStatus的逻辑。 – 2014-09-02 13:24:07
由于您的2状态包括'ArrivalTime为空',因此您的第二行不可能有2状态。您的帖子中必须有错误。 – 2014-09-02 13:25:51
请发布不仅仅是ORDER BY的完整查询。 – wdosanjos 2014-09-02 13:45:30