SQL - 按时间排序,然后按开始时的文本排序

时间:2017-03-29 02:38:01

标签: sql sql-server-2012

我的查询如下:

  

SELECT DISTINCT TimeSched from tbl_schedule

返回此结果:

TimeSched

Rest Day
11:00 AM - 08:00 PM
No Schedule
09:00 AM - 06:00 PM
10:00 AM - 07:00 PM

当我使用ORDER BY TimeSched时,它会返回以下结果:

TimeSched

09:00 AM - 06:00 PM
10:00 AM - 07:00 PM
11:00 AM - 08:00 PM
No Schedule
Rest Day

但是,我想要的结果是默认情况下我想要第一行和第二行的“休息日”和“无日程表”,然后按升序排列日程表顺序。如下所示:

TimeSched

Rest Day
No Schedule
09:00 AM - 06:00 PM
10:00 AM - 07:00 PM
11:00 AM - 08:00 PM

4 个答案:

答案 0 :(得分:1)

试试这个。

select * from timetable
order by 
iif(timesched in ('No Schedule','Rest Day'),'01' + timesched,timesched)
  

为No Schedule和Restday添加前缀   01订购时..所以01No将去1,01R将接下来然后你的09去   24

答案 1 :(得分:1)

如何简单地做:

SELECT DISTINCT TimeSched 
FROM tbl_schedule
ORDER BY (CASE WHEN timesched LIKE '[a-zA-Z]%' THEN 1 ELSE 0 END), 
         timesched;

答案 2 :(得分:1)

尝试使用以下代码:

    DECLARE @TimeSched TABLE
    (ID INT IDENTITY(1,1),TimeSched VARCHAR(20))

    INSERT INTO @TimeSched
    VALUES
    ('Rest Day'),
    ('11:00 AM - 08:00 PM'),
    ('No Schedule'),
    ('09:00 AM - 06:00 PM'),
    ('10:00 AM - 07:00 PM')

    SELECT * FROM @TimeSched
    ORDER BY 
    CASE 
        WHEN TimeSched ='Rest Day' THEN 1
        WHEN TimeSched ='No Schedule' THEN 2
        ELSE 3 END

答案 3 :(得分:0)

以下是我的问题的答案。

SELECT CASE TimeSched WHEN 'Restday' THEN 1 WHEN 'No Schedule' THEN 2 ELSE 3 END 
AS TimeSked, TimeSched ORDER BY TimeSked, TimeSched