0

我有一个名为 mytable 的表格,其中包含这些结果

ID | name
----------
1  | one
2  | two
3  | three
4  | four
5  | five


我需要这个结果

ID | name
----------
3  | three
1  | one
2  | two
4  | four
5  | five

记录'3,三'必须在第一行,然后在该记录之后显示其他。谢谢你 ;

4

4 回答 4

1

尝试这个:

select ID, NAME from 
    (select *, -1 as rnum from tb where id=3
    union all
    select *, ID as rnum from tb where id!=3 ) tb1
ORDER BY rnum ASC

这是SQLfiddle

于 2013-09-08T16:07:25.857 回答
0
select * from mytable s where s.id=3
union all
select * from ( 
    select t.id,t.name from mytable t where t.id!=3
order by t.id) as q;

SQLfiddle 演示

于 2013-09-08T15:55:32.763 回答
0

尝试这个。它应该在 PostgreSQL、MySQL 和 SQLServer 中工作

SELECT ID, Name
FROM (
  SELECT 1 AS ID,  'one' as NAME 
  UNION SELECT 2 , 'two'
  UNION SELECT 3 , 'three'
  UNION SELECT 4 , 'four'
  UNION SELECT 5 , 'five'

) AS MyDataSet
ORDER BY CASE WHEN ID = 3 THEN 0 ELSE 1 END
于 2013-09-08T17:22:36.160 回答
0

使用标准 SQL,您可以简单地根据您想要的第一行的值进行排序(该特定行的返回值低于所有其他行的值),然后是 ID。

SELECT * FROM mytable
ORDER BY CASE WHEN name='three' THEN 0 ELSE 1 END, ID

一个用于测试的 SQLfiddle

于 2013-09-08T17:26:20.880 回答