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