如何合并重复的行而不删除行

时间:2019-04-03 01:16:41

标签: postgresql merge duplicates

可能有类似的问题,但我还没有找到答案。

我在下面有桌子

id | lang_code |  name
1010522747 | CHT | Si Li Ai Guang You Zhi Yuan
1010522747 | ENG | Si Li Ai Guang Kindergarten
1010522758 | CHT | Tai Bei Shi Li Wen Hu Guo Min Xiao Xue
1010522758 | ENG | Tai Bei Shi Li Wen Hu Elementary School
1010522760 | CHT | Xiang He Yao Ju
1010522760 | ENG | Xiang He Pharmacy
1010522754 | CHT | Guan Shan De Bian Dang
1010522758 | CHT | Tai Bei Shi Li Wen Hu Guo Min Xiao Xue

基本上,这些数据是关于台湾当地商店的名称的,并非所有行都有英文或音译名称。 (换句话说,在某些情况下,只有音译名称,而没有英文和音译名称)

我想要的是 我希望使用id字段可以轻松加入行。 例如,

这就是我到目前为止所做的代码。

select id, lang_code, (case when lang_code = 'ENG' then name_dp end) as name_en, 
(case when lang_code = 'CHT' then name_dp end) as name_trans

结果在下面

id | lang_code |  name_en | name_trans
1010522747 | CHT | NULL              | Si Li Ai Guang You Zhi Yuan
1010522747 | ENG |Si Li Ai Guang Kindergarten | NULL
1010522749 | CHT | NULL              | A Cai Yu Chi Rou Geng
1010522750 | CHT | NULL              | Ju Jiang Dian Nao
1010522754 | CHT | NULL              | Guan Shan De Bian Dang
1010522758 | CHT | NULL              | Tai Bei Shi Li Wen Hu Guo Min Xiao Xue
1010522758 | ENG | Tai Bei Shi Li Wen Hu Elementary School | NULL

我希望结果与下面相同。

id | name_merged
1010522747 | Si Li Ai Guang Kindergarten | Si Li Ai Guang You Zhi Yuan
1010522749 | A Cai Yu Chi Rou Geng
1010522750 | Ju Jiang Dian Nao
1010522754 | Guan Shan De Bian Dang
1010522758 | Tai Bei Shi Li Wen Hu Elementary School | Tai Bei Shi Li Wen Hu Guo Min Xiao Xue

1 个答案:

答案 0 :(得分:0)

对不起,我刚刚提出了一个非常简单的解决方案“自我加入”

这是代码

select a.poi_id, coalesce(a.name_dp, b.name_dp) as name_merged, a.name_dp as name_en, b.name_dp as name_trans
from MYTABLE as a
left join MYTABLE as b
on a.id = b.id and b.lang_code = 'CHT'
where a.lang_code = 'ENG'