如何在 SQL 中显示第一个数值范围?
How do I show a range of numerical values first in SQL?
我该如何安排它,以便它仍然按时间排序,但任何小于 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
这可以用 "order by" 代码实现吗?或者我还需要其他东西吗?
我正在使用 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 将被切换。因此,优先级将放在 ID 号上。
使用这个自定义排序
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
使用 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
我该如何安排它,以便它仍然按时间排序,但任何小于 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
这可以用 "order by" 代码实现吗?或者我还需要其他东西吗?
我正在使用 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 将被切换。因此,优先级将放在 ID 号上。
使用这个自定义排序
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
使用 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