如何使用join和row_number更改db2中包含行的列?

时间:2016-11-19 19:16:33

标签: sql join db2 pivot row-number

我有一张桌子: 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

提前致谢。

1 个答案:

答案 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)