2011-08-27 53 views
0

这里去...多个选择 - 相同的表

我有一个标题为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甚至可以做到这一点?

在此先感谢您的帮助。

回答

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) 
5

试试这个

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

+1这部作品的PostgreSQL。聪明的想法。 – cdhowie

+0

完美---这是作品!非常感谢。 –

+0

如果它工作,请标记此答案是正确的。 – Chris

3

可以使用单一选择和排序条件:

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

(无需在身边的情况下括号,我只是说他们使代码更清晰。)

相关问题