Select Case无法使用Order by

时间:2014-10-22 15:01:30

标签: sql sql-order-by case

我使用的是一个简单的SQL查询并获得一个有序列表,但是当我更改了排序依据列中的某些值时,这些行不再正确排序。

select distinct u.Email, 
  case 
    when l.region_id is null then 'EU' 
    else l.region_id 
  end 
  as Location 
from TB_User u 
left join cat..location l on l.location=u.Location 
where u.Username in (....)
order by l.region_id

我有大约5行为其region_id返回null,因此它们将位于结果集的顶部。当我添加案例并替换它们的价值时,它们仍然保持在顶部。反正是否要根据给定的值对这些行进行排序?

3 个答案:

答案 0 :(得分:3)

您也可以在CASE中使用ORDER BY。但在这种情况下,您似乎想要按使用CASE的列进行排序。

ORDER BY Location 

如果您想要底部的空区域:

ORDER BY CASE WHEN l.region_id is null THEN 0 ELSE 1 END DESC,  
         Location  ASC

如果你的rdbms不支持这个(就像SQL-Server那样),你必须重复它:

ORDER BY CASE WHEN l.region_id IS NULL THEN 'EU' ELSE l.region_id END ASC

答案 1 :(得分:0)

您只需按列值排序,即null。 如果您想通过case语句进行排序,只需按顺序复制它:

order by   
  case 
    when l.region_id is null then 'EU' 
    else l.region_id end

答案 2 :(得分:0)

如果您使用的是SQL ,请在SELECT语句中尝试使用:

ISNULL(l.region_id, 'EU') AS Location

然后

ORDER BY 2

这将使您的查询:

SELECT DISTINCT u.Email, ISNULL(l.region_id, 'EU') AS Location 
FROM TB_User u 
LEFT JOIN cat..location l ON l.location=u.Location 
WHERE u.Username in (....)
ORDER BY 2