繁体   English   中英

Select Case无法使用Order by

[英]Select Case is not working with Order by

我正在使用一个简单的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,因此它们将位于结果集的顶部。 当我添加案例并替换它们的价值时,它们仍然保持在顶部。 反正有没有让这些行按照给定的值排序?

您也可以在ORDER BY使用CASE 但在这种情况下,您似乎想要通过使用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

您只需按列值排序,该值为null。 如果您想通过case语句进行排序,只需在order by子句中复制它:

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

如果您使用的是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM