除第一条记录外,使用SQL按顺序查询

时间:2011-12-15 16:22:32

标签: sql

我有一个想法,例如我有一张包含姓名的表(Ann,Ben,Chris,Tom,John),
我想先用字母a来查询它,最后是z。

但我有一个条件,我想把John放在第一张唱片中。

4 个答案:

答案 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'