【问题标题】:Clause ORDER BY条款 ORDER BY
【发布时间】:2013-08-05 13:26:51
【问题描述】:

我在 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 子句,但没有成功!

谢谢你和问候。

【问题讨论】:

  • 您能展示一下您尝试过的 Select 语句吗?
  • “100”有什么神奇的价值吗?
  • 不,不是魔法值,而是一个例子......

标签: sql sql-server


【解决方案1】:

其实你想把第二列100的行移到最下面,然后按第一列排序:

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

【讨论】:

  • 所以帕拉多回答了这个问题,你回答了想要的结果;)
【解决方案2】:

如下使用CASE 表达式

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

【讨论】:

  • Tankyou,我不知道关键字 CASE 与 ORDERBY 子句一起使用的这种特殊用法。
  • 抱歉,没有按我的预期工作..实际上结果是:a 2 a 100 b 1 b 1 c 2 c 100 d 1 d 1
【解决方案3】:
SELECT * 
FROM table1
ORDER BY 
CASE 
   WHEN col2>=100 THEN 1
   ELSE 0
END,
col1,
col2

SQLFiddle Example

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    相关资源
    最近更新 更多