Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的排序_Sql_Sql Server_Sql Order By - Fatal编程技术网

SQL中的排序

SQL中的排序,sql,sql-server,sql-order-by,Sql,Sql Server,Sql Order By,我试图在SQL查询中使用CASE语句在orderby子句中实现一个“自定义”排序,但它给了我一些奇怪的排序 以下是我迄今为止的订购依据条款: ORDER BY CASE WHEN CheckInStatus <> 'Cancelled' AND ArrivalTime is null AND GETDATE() > DATEADD(mi,30, CAST(StartDateTime AS DATETIME))THEN 1 WHEN

我试图在SQL查询中使用
CASE
语句在
orderby
子句中实现一个“自定义”排序,但它给了我一些奇怪的排序

以下是我迄今为止的订购依据条款:

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
发生了几件事

  • 因为我当前的GETDATE()是2014年8月28日,所以上面的状态不应该是2。因为它不小于或等于开始日期后30分钟
  • 因为这本身是错误的,它可能导致第二个问题——因为它被标记为2,它应该出现在3之前,而不是之后
    我猜它是根据您选择的列进行排序的,因为当您有一个查询时

    select empno, empname,sal from emp order by 2,3
    

    它将根据empname和sal对查询进行排序,因为“order by 2,3”表示第2列和第3列。检查select列表中的列号。

    将CASE语句移动到select子句中,以便清楚地看到结果。考虑分离逻辑到达时间和校验状态。因为你的2状态包括“到达时间为空”,所以第二行不可能有2状态。您的帖子中一定有错误。请发布完整的查询,而不仅仅是订单。
    select empno, empname,sal from emp order by 2,3