[英]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.