多个选择 - 相同的表

时间:2011-08-27 18:37:58

标签: sql

这里......

我在名为MyTable的表中有5条记录,其中包含一个名为Se的字段。 5条记录包含以下值(1-5):

se=1 se=2 se=3 se=4 se=5

我希望将记录返回给我,如下所示:

SELECT * FROM MyTable WHERE se >= 3
UNION
SELECT * FROM MyTable WHERE se < 3
ORDER BY se ASC

我的目标是将记录返回为:

3,4,5,1 2

但我自然会得到......

1,2,3,4,5

你能帮帮我吗? MSSQL Server甚至可以这样做吗?

提前感谢您的任何帮助。

3 个答案:

答案 0 :(得分:5)

试试这个

SELECT 1, * FROM MyTable WHERE se >= 3
UNION ALL
SELECT 2, * FROM MyTable WHERE se < 3
ORDER BY 1, se ASC

答案 1 :(得分:3)

您可以在排序中使用单个选择和条件:

select *
from MyTable
order by (case when se >= 3 then 0 else 1 end), se

(不需要围绕案例的括号,我只是添加它们以使代码更清晰。)

答案 2 :(得分:1)

如果您正在寻找特定方案的黑客攻击:

SELECT * FROM MyTable ORDER BY (se + 2) % 5

关于PostgreSQL的例子:

$ WITH MyTable(se) AS (VALUES
$     (1), (2), (3), (4), (5)
$ )
$ SELECT * FROM MyTable ORDER BY (se + 2) % 5;
 se
----
  3
  4
  5
  1
  2
(5 rows)