跨越午夜的 SQL 排序

TSQL Ordering spanning over midnight

我在尝试根据出发时间到到达时间订购 TSQL table 时遇到问题,如果它超过午夜的话。

如您所见,我按时间列从早到晚排序,但左侧 location_type 下方有一个标志,表明第一个离开是 LO 行。所以它应该从这里开始到 LT 行结束。

╔══════════════════════════════════════════════════════════════════════════════════════════════╗
║ location_type           nlcdesc                         arrival     pass    departure   time ║
╠══════════════════════════════════════════════════════════════════════════════════════════════╣
║ LI                      WILLESDEN BRENT SDGS (FL)       0110        0110    NULL        0110 ║
║ LI                      WEST LONDON JN                  NULL        0204    NULL        0204 ║
║ LI                      NORTH JUNCTION                  NULL        0322    NULL        0322 ║
║ LI                      RUGBY TRENT VALLEY JUNCTION     NULL        0405    NULL        0405 ║
║ LT                      SPEKE JN                        0430        NULL    NULL        0430 ║
║ LO                      LIVERPOOL GARSTON FRTLNR DEPOT  NULL        NULL    2153        2153 ║
║ LI                      ACTON BRIDGE                    NULL        2223    NULL        2223 ║
║ LI                      STAFFORD                        NULL        2255    NULL        2255 ║
║ LI                      CHANNELSEA JN                   NULL        2331    NULL        2331 ║
║ LI                      DAGENHAM DOCK                   NULL        2355    NULL        2355 ║
╚══════════════════════════════════════════════════════════════════════════════════════════════╝  

所以我希望结果看起来像这样

╔══════════════════════════════════════════════════════════════════════════════════════════════╗
║ location_type           nlcdesc                         arrival     pass    departure   time ║
╠══════════════════════════════════════════════════════════════════════════════════════════════╣
║ LO                      LIVERPOOL GARSTON FRTLNR DEPOT  NULL        NULL    2153        2153 ║
║ LI                      ACTON BRIDGE                    NULL        2223    NULL        2223 ║
║ LI                      STAFFORD                        NULL        2255    NULL        2255 ║
║ LI                      CHANNELSEA JN                   NULL        2331    NULL        2331 ║
║ LI                      DAGENHAM DOCK                   NULL        2355    NULL        2355 ║
║ LI                      WILLESDEN BRENT SDGS (FL)       0110        0110    NULL        0110 ║
║ LI                      WEST LONDON JN                  NULL        0204    NULL        0204 ║
║ LI                      NORTH JUNCTION                  NULL        0322    NULL        0322 ║
║ LI                      RUGBY TRENT VALLEY JUNCTION     NULL        0405    NULL        0405 ║
║ LT                      SPEKE JN                        0430        NULL    NULL        0430 ║
╚══════════════════════════════════════════════════════════════════════════════════════════════╝   

如您所见,它从标有 LO 的出发行开始,以标有 LT 的到达行结束。跨越午夜 2355 到 0110 行

非常感谢任何帮助,非常感谢

您可以使用 CASE 如:

SQLFiddleDemo

SELECT *
FROM your_table
ORDER BY
  CASE 
     WHEN [time] >= 1200 AND [time] <=2359 THEN 0
     ELSE 1
  END ASC
  ,[time]

您可以根据需要设置起始 [time] >=1200 例如 1800