我如何安排这个以便它仍然按时间排序,但是还会首先显示10岁以下的任何ID?
Time | ID
9:15 | 1
9:20 | 5
9:25 | 12
9:30 | 3
9:35 | 26
9:40 | 22
9:45 | 15
这可以通过""来实现。码?或者我还需要其他东西吗?
我正在使用Microsoft SQL Server 2012。
编辑:这是我希望的输出:
Time | ID
9:15 | 1
9:20 | 5
9:30 | 3
9:25 | 12
9:35 | 26
9:40 | 22
9:45 | 15
ID 12和3将被切换。所以优先考虑的是身份证编号那么。
答案 0 :(得分:3)
使用此自定义排序
SELECT *
FROM Yourtable
ORDER BY CASE
WHEN id <= 10 THEN id
ELSE 11-- Just a number greater then 10 to keep the id>10 after id<=10
END ASC,
time
架构设置
create table #tts(Time time, ID int)
insert #tts values
('9:00' ,21 )
('9:15' ,1 ),
('9:20' ,5 ),
('9:25' ,12),
('9:30' ,3 ),
('9:35' ,26),
('9:40' ,22),
('9:45' ,15)
查询
SELECT *
FROM #tts
ORDER BY CASE
WHEN id <= 10 THEN id
ELSE 11
END ASC,
time
答案 1 :(得分:1)
使用ORDER BY的嵌套查询也可以,但最终会得到第3列:
SELECT t.* FROM
( SELECT Time
,ID
,CASE WHEN ID < 10 THEN 1 ELSE 2 END AS 'ColOrder'
FROM YourTable) as t
ORDER BY t.ColOrder, t.Time