我正在尝试使用ORDER BY
语句在我的SQL查询中的CASE
子句中实现“自定义”排序,但它给了我一些时髦的排序
到目前为止,这是我的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
我想要做的是按如下方式订购查询:
没有到达的人(以及谁的约会未被取消)和当前时间超过StartTime超过30分钟 - 这些人应该是第一个
未到达的人(以及谁的约会未被取消)和当前时间小于或等于StartTime之后的30分钟 - 这些人出现在第二位
接下来是签到的所有人
随后取消约会
最后是其他一切
所有内容都将按StartTime和Name
排序问题似乎发生在2和3。这些家伙似乎混在一起,我认为这可能与我的AND有关,但我不知道如何解决它。
以下是我在搜索结果中遇到的错误 - 我已在CASE
中加入了ORDER BY
,以便直观地看到问题
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
所以发生了一些事情
答案 0 :(得分:0)
我猜它会根据您选择的列进行排序,因为当您有查询时
select empno, empname,sal from emp order by 2,3
它将根据empname命令查询,然后sal为“order by 2,3”表示第2和第3列。检查选择列表中的列号。