我有一个想法,例如我有一张包含姓名的表(Ann,Ben,Chris,Tom,John),
我想先用字母a来查询它,最后是z。
但我有一个条件,我想把John放在第一张唱片中。
答案 0 :(得分:22)
select name
from names
order by
case when name = 'John' then 0 else 1 end,
name
答案 1 :(得分:2)
(SELECT * FROM atable WHERE username = 'John')
UNION ALL
(SELECT * FROM atable WHERE username <> 'John' ORDER BY username)
或者更一般:
(SELECT * FROM atable ORDER BY username DESC LIMIT 1)
UNION ALL
(SELECT * FROM atable WHERE id NOT IN (
SELECT id FROM atable ORDER BY username DESC LIMIT 1)
ORDER BY username)
如果您 出于某种原因避免使用该联盟,这个速度较慢的代码也会起作用:
SELECT * FROM atable
ORDER BY
CASE WHEN id IN (SELECT id FROM atable ORDER BY username DESC LIMIT 1)
THEN 0 ELSE 1 END
, username
在SQL-server中,语法略有不同,子查询是:
SELECT TOP 1 id FROM atable ORDER BY username DESC
答案 2 :(得分:1)
很简单:
(SELECT Name
FROM Users
WHERE Name = 'John')
UNION ALL
(SELECT *
FROM Users
WHERE Name <> 'John'
ORDER BY Name)
答案 3 :(得分:0)
在order by子句中放置case语句不适用于select distinct。我发现以下内容更直观,并且如果您还需要选择distinct,则可以使用。虽然它确实在结果集中返回了一个额外的列。
Name IsTopRow
John 1
Ann 0
Ben 0
Chris 0
Tom 0
结果:
oneOrder.ProductID == 'A'