在DB2中将多个记录转换为多个列

5kgi1eie  于 2023-01-20  发布在  DB2
关注(0)|答案(1)|浏览(186)

我有一个数据集如下:

ID  Type    Email
1   A   emily&gmail.com
1   B   adam&gmail.com
1   C   tim&gmail.com
2   A   jim&gmail.com
2   C   kenny&gmail.com
3   A   sam&gmail.com
3   B   asd123&gmail.com
3   C   emma&gmail.com
4   D   jkl&gmail.com
4   F   tester&gmail.com
4   G   form&gmail.com
5   B   another&gmail.com
5   C   idk&gmail.com

我想使用云DB2示例中的SQL将其转换为以下格式:

ID   A                 B
1    emily&gmail.com   adam&gmail.com
2    jim&gmail.com     NULL
3    sam&gmail.com     asd123&gmail.com
4    NULL              NULL
5    NULL              another&gmail.com

如示例所示,在我的原始表中,我有3列,其中的类型可以是A、B、C、D、E、F或G。我想创建一个新数据集,其中我只保留ID列,并且每个ID在这里必须是唯一的。根据上一个类型列,A和B将是此数据集中的列。如果ID在第一个数据集中的类型为A,对应的电子邮件地址将进入A列。2 B也是如此。3如果第一个数据集中没有A或B记录,则值应为NULL。
我尝试了下面的代码,但可能语法有问题:

SELECT ID
       MAX(CASE WHEN ROLE = 'A' THEN T.EMAIL ELSE NULL END) AS A,
       MAX(CASE WHEN ROLE = 'B' THEN T.EMAIL ELSE NULL END) AS B
  
FROM MYSCHEMA.MYTABLE T
qyuhtwio

qyuhtwio1#

只是为了在这里有一个答案,因为答案来自评论,我只是错过了GROUP BY,我可以通过删除ELSE NULL部分来缩短查询:

SELECT ID,
       MAX(CASE WHEN ROLE = 'A' THEN T.EMAIL END) AS A,
       MAX(CASE WHEN ROLE = 'B' THEN T.EMAIL ELSE NULL END) AS B
  
FROM MYSCHEMA.MYTABLE T
GROUP BY ID

相关问题