如何确定具有值的行的优先级

时间:2014-01-19 06:23:28

标签: sql

我有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创建它?

2 个答案:

答案 0 :(得分:1)

你应该分为两类:

  1. 你的价值是否设定
  2. 价值本身
  3. 为了实现它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

Working Fiddle

<强>(或)

SELECT *
FROM TEST
ORDER BY (case when value is null or value='' then 1 else value end) DESC