【问题标题】:How to change columns with rows in db2 using join and row_number?如何使用 join 和 row_number 更改 db2 中包含行的列?
【发布时间】:2016-11-19 19:16:32
【问题描述】:

我有一张桌子: city_name

需要这样: city_n1n2n3

我已经有了解决方案,但需要使用 joins 和 row_number():

选择城市,coalesce(max(case when id_name=1 then name end),'nobody') as name1, coalesce(max(case when id_name=2 then name end),'nobody') as name2, coalesce( max(case when id_name=3 then name end),'nobody') as name3 from city_name group by city order by city desc

提前致谢。

【问题讨论】:

  • 您有一个非常好的解决方案,为什么还要寻找其他解决方案?
  • 因为我的老师给了我一个任务来使用joins和row_number来解决这个问题:)

标签: sql join db2 pivot row-number


【解决方案1】:

这是一个带有行号的解决方案,但它不是最好的解决方案,因为您事先不知道有多少用户(因此您可以拥有多少列)

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多