我正在尝试使用下表创建一个新的数据表:
ID City Language
1 Paris French
2 New York English
3 Delhi English
4 Berlin German
5 Marseille French
6 Hamburg German输出应该是这样的:
City 1 City2 Language
Paris Marseille French
NY Delhi English
Berlin Hamburg German这里的主要思想是避免具有相同城市的2行,例如巴黎-马赛和马赛-巴黎。请给出如何实现它的建议。
发布于 2020-06-19 22:51:05
你只是想要聚合吗?
select min(city), max(city), language
from t
group by language;发布于 2020-06-19 22:51:08
如果每种语言只有两行,那么简单的聚合就足够了:
select min(city) city1, max(city) city2, language
from mytable
group by language如果您希望处理更多城市,和/或根据初始行的id控制它们在列中的显示顺序,则可以使用窗口函数和条件聚合:
select
max(case when rn = 1 then city end) city1,
max(case when rn = 2 then city end) city2,
max(case when rn = 3 then city end) city3
from (
select t.*, row_number() over(partition by language order by id) rn
from mytable t
) t
group by languagehttps://stackoverflow.com/questions/62472795
复制相似问题