1

我的数据库中有一个列名“代码”,它包含像这样的不同数字..

Product      |      Code
===============================
  p1         |       0
  p2         |      120
  p3         |       0
  p4         |      222
  p5         |       1
  p6         |       1
  p7         |      180
  p18        |      300

我想对表格进行排序,按代码排序。代码为“1”的产品首先出现,然后是 ASC 顺序中的所有数字,最后显示代码为“0”的产品。像这样

Product      |      Code
===============================
  p5         |       1
  p6         |       1
  p2         |      120
  p7         |      180
  p4         |      222
  p18        |      300
  p3         |       0
  p1         |       0

SQL查询的任何帮助谢谢?

4

3 回答 3

1

您可以使用 UNION ALL 的技巧来做到这一点:

SELECT Product,Code FROM (
   SELECT Product,Code,0 AS ORD FROM Table1 WHERE code != 0
UNION ALL
    SELECT Product,Code,1 FROM Table1 WHERE code=0
) a
ORDER BY ORD,CODE

这将首先给您!= 0,按代码排序,然后是 = 0。

sqlfiddle demo

于 2013-10-26T23:42:30.323 回答
1

先排序是否Code = 0(升序,默认,false/0在true/1之前);然后对Code自身的值进行排序:

SELECT * FROM my_table ORDER BY Code = 0, Code

sqlfiddle上查看。

于 2013-10-27T00:02:24.247 回答
0

SELECT product,code FROM table ORDER BY CASE WHEN Code=0 THEN (SELECT max(Code)+1 FROM table) ELSE Code END ASC;

于 2013-10-26T23:40:25.277 回答