2015-10-06 26 views
1

我在尝试按照到达时间的出发时间订购TSQL表时遇到问题,如果它经过午夜。TSQL Ordering spanning over midnight

正如你可以看到我的时候列排序,以便最早到最晚的,但有一个国旗下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行

任何帮助将不胜感激,非常感谢

回答

2

您可以使用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