将重复行结果划分为两行DB2

rks48beu  于 2023-04-06  发布在  DB2
关注(0)|答案(1)|浏览(165)

我正在处理一些数据,这些数据概述了一个人想要的接收消息的方式。一些客户在两个不同的行上列出了两种方法。我希望每个ID只有一行。这意味着如果一个人列出了两种传递方法,第二种方法应放入行 secondary_delivery_method 中。如何创建新行,并消除使用不同方法具有重复项的客户的第二行?
快速示例:
| ID|联系我们|姓氏|偏好|
| --------------|--------------|--------------|--------------|
| 1|约翰|史密斯|正文|
| 1|约翰|史密斯|电子邮件|
--应该是--
| ID|联系我们|姓氏|主要方法|次要方法|
| --------------|--------------|--------------|--------------|--------------|
| 1|约翰|史密斯|正文|电子邮件|
顺序无关紧要,数据库中列在第一位的都可以设置为主。当前输出:Current Results
Expected output

acruukt9

acruukt91#

您可以:

select 
  id,
  max(first_name) as first_name,
  max(last_name) as last_name,
  max(case when rn = 1 then preference end) as primary_method,
  max(case when rn = 2 then preference end) as secondary_method
from (
  select t.*, row_number() over(partition by id) as rn
  from t
) x
group by id;

结果:

ID   FIRST_NAME   LAST_NAME   PRIMARY_METHOD   SECONDARY_METHOD  
 ---- ------------ ----------- ---------------- ------------------ 
  1    John         Smith       Text             Mail              
  2    Anne         Doe         Twitter          null

请参阅db<>fiddle上的运行示例。我添加了一个额外的行(Anne)来显示分组。

相关问题