我有一张桌子: city_name
需要像这样得到smth: city_n1n2n3
我已经有了解决方案,但需要使用join和row_number():
选择城市,合并(最大(id_name = 1,然后名称结束),' nobody')作为name1,coalesce(max(id_name = 2然后名称结束时的情况),' nobody')作为name2,coalesce(max(id_name = 3然后名称结束时的情况),' nobody')作为city_name from city_name group by city order by city desc
提前致谢。
答案 0 :(得分:0)
这是一个带有rownumber的解决方案,但它不是最好的解决方案,因为您事先并不知道有多少用户(因此您可以拥有列)
with cityuserwithrow as (
select f1.*, rownumber() over(partition by f1.city order by f1.name) as rang
from city_name f1
)
select distinct f0.city,
ifnull(f1.name, 'NOBODY') as NAME1,
ifnull(f2.name, 'NOBODY') as NAME2,
ifnull(f3.name, 'NOBODY') as NAME3
from city_name f0
left outer join cityuserwithrow f1 on (f0.city, 1)=(f1.city, f1.rang)
left outer join cityuserwithrow f2 on (f0.city, 2)=(f2.city, f2.rang)
left outer join cityuserwithrow f3 on (f0.city, 3)=(f3.city, f3.rang)