在ORDER BY中使用CASE将一些记录推送到最后

时间:2012-09-19 14:44:36

标签: sql sql-order-by case

我通常使用类似的结构:

ORDER BY CASE WHEN Location = 'ROOT' THEN '~' ELSE Location END

在ASCII环境中,这成功地将Location ROOT的所有记录推送到最后,而所有其他记录都正常排序。这是因为'〜'字符接近字符集的末尾。然而,随着使用比ASCII更广泛的字符集的数据库越来越普遍,我希望这种技术偶尔不起作用。

有什么替代方案?具体来说,我想要一种将字段中具有特定值的记录推送到列表末尾的技术。

我主要使用MS SQL,但我也对一般技术感兴趣,并且可以使用Oracle。

2 个答案:

答案 0 :(得分:5)

要将Location = 'ROOT'的值推到最后,请尝试以下操作:

ORDER BY CASE WHEN Location = 'ROOT' THEN 1 ELSE 0 END, Location 

答案 1 :(得分:3)

ORDER BY CASE WHEN Location = 'ROOT' THEN 1 ELSE 0 END, Location