将重复的行结果分成两行 DB2

问题描述 投票:0回答:1

我正在处理一些数据,这些数据概述了一个人希望的接收消息的方式。有些客户在不同的两行列出了两种方法。我想每个 ID 只有一行。这意味着如果一个人列出了两种交付方式,则应将第二种方式放入行secondary_delivery_method。我将如何为使用不同方法重复的客户创建新行并消除第二行?

快速示例:

ID 名字 姓氏 偏好
1 约翰 史密斯 文字
1 约翰 史密斯 邮件

--- 应该是 ---

ID 名字 姓氏 主要方法 次要方法
1 约翰 史密斯 文字 邮件

顺序无关紧要,数据库中先列出的可以设置为主。 当前输出: Current Results

Expected output

sql duplicates db2 row
1个回答
0
投票

你可以这样做:

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) 来显示分组。

© www.soinside.com 2019 - 2024. All rights reserved.