条款ORDER BY

时间:2013-08-05 13:26:52

标签: sql sql-server

我在sql server中选择了一个问题,我有这个表有2列:

a   2
b   1
c  100
d   1
a  100
b   1
c   2
d   1

我想根据第一栏订购它,就这样:

a   2
a   100
b   1
b   1
c   2
c   100
d   1
d   1

但是后来j想要将secondcolumn = 100的行移到底部,所以:

a   2
b   1
b   1
c   2
d   1
d   1
a  100
c  100

我已尝试使用ORDER BY column1 ASC,(column2 = 100)ASC,但它没有用!

谢谢你和问候。

3 个答案:

答案 0 :(得分:5)

实际上,您希望第二列中包含100的行移到底部第一个,然后按第一列排序:

order by (case when col2 = 100 then 1 else 0 end),
         col1

答案 1 :(得分:2)

使用下面的CASE表达式

SELECT * 
FROM   tab 
ORDER  BY CASE 
            WHEN column2 = 100 THEN 1 
            ELSE 0 
          END ASC,
          column1 asc 

答案 2 :(得分:1)

SELECT * 
FROM table1
ORDER BY 
CASE 
   WHEN col2>=100 THEN 1
   ELSE 0
END,
col1,
col2

SQLFiddle Example