我有tabl,其中包含id(数字)和名称;
有些人有名字和Id 有些只有ID
离)
+--+----+
|id|name|
+--+----+
|1 |ddd |
+--+----+
|2 |eee |
+--+----+
|3 | |
+--+----+
|4 |eee |
+--+----+
|5 | |
+--+----+
|6 |kkk |
+--+----+
我想优先考虑名称为
的行+ - + ---- + | ID |名称| + - + ---- + | 1 | ddd | + - + ---- + | 2 | eee | + - + ---- + | 4 | eee | + - + ---- + | 6 | kkk | + - + ---- + | 3 | | + - + ---- + | 5 | | + - + ---- +
我认为OrderBy可以用于此,但不确定。我试过但是徒劳无功。
如何通过SQL创建它?
答案 0 :(得分:1)
你应该分为两类:
为了实现它1.你可以使用NULLIF(Value, '') = ''
- 它会为1
返回null
或为其他人返回空值,为0
返回,因此按DESC
排序1}}将首先为您提供非null /非空值。按Value
进行的其他标准排序会对值ASC
进行排序。
这样的事情应该成功:
SELECT *
FROM TEST
ORDER BY NULLIF(Value, '') = '' DESC, Value
以下是工作演示:http://sqlfiddle.com/#!2/73dab/1
答案 1 :(得分:0)
试试这个
SELECT *
FROM TEST
ORDER BY (case when value is null or value='' then 'zzzz' else value end) DESC
<强>(或)强>
SELECT *
FROM TEST
ORDER BY (case when value is null or value='' then 1 else value end) DESC