【发布时间】:2023-01-20 07:23:57
【问题描述】:
我有一个如下所示的数据集:
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
我想在 Cloud 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 列。 B 也一样。如果第一个数据集中没有 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
【问题讨论】:
-
在查询末尾添加
GROUP BY ID,看看会发生什么。 -
这个“ELSE NULL”应该有什么作用或优势呢?
-
ELSE NULL是默认行为。您可以删除它以使查询更短。