DB2中如何合并相同ID记录并生成指定格式的查询结果?
DB2 实现指定格式查询的SQL语句
假设数据表名为employee,可以通过分组判断结合字符串聚合实现需求,SQL语句如下:
SELECT ID, NAME, CASE -- 当同一人员只有一个直属上级时,直接显示上级标识 WHEN COUNT(*) = 1 THEN MAX(Boss) -- 当存在多个直属上级时,对主要职责对应的上级追加标注后拼接 ELSE LISTAGG( CASE WHEN UPPER("Main responsibility") = 'YES' THEN Boss || '(主要职责)' ELSE Boss END, ' AND ' ) END AS "main responsibility" FROM employee GROUP BY ID, NAME ORDER BY ID;
逻辑说明
- 分组判断:按
ID和NAME分组,通过COUNT(*)判断当前人员的直属上级数量。 - 单一上级处理:若仅存在一个上级,直接取该上级的标识(用
MAX(Boss)是因为分组后单一值的聚合不影响结果)。 - 多上级处理:若存在多个上级,使用
LISTAGG函数拼接所有上级标识;同时通过CASE WHEN将Main responsibility为YES(统一大小写避免匹配问题)的上级追加(主要职责)标注,分隔符采用' AND '。 - 排序:最后按
ID排序,确保结果顺序与需求示例一致。
执行该语句后,将得到与需求完全匹配的查询结果:
| ID | NAME | main responsibility |
|---|---|---|
| 01 | Tommy | X3 |
| 02 | Elis | X2(主要职责) AND X3 |
| 03 | John | X65 |
| 04 | Lille | x50 |
内容的提问来源于stack exchange,提问作者Tick _Tack
相关产品推荐
相关产品推荐

