同一客户同表值筛选:按Id聚合单条记录的实现问题
按Id聚合生成单条记录的解决方案
核心SQL语句
SELECT Id, MAX(sys1) AS sys1, MAX(sys2) AS sys2, MAX(sys3) AS sys3, MAX(name) AS name, MAX(status) AS status, MAX(lifecycle) AS lifecycle FROM your_table_name GROUP BY Id;
逻辑说明
- sys1/sys2/sys3字段:利用
MAX()聚合函数自动忽略空值的特性,提取每个Id下对应字段的唯一非空值,精准匹配“保留所有非空值”的要求。 - name字段:同一Id对应的name值一致,用
MAX()直接提取即可(也可将name加入GROUP BY子句)。 - status/lifecycle字段:通过
MAX()提取每个Id下的非空有效值,确保最终结果保留该Id下的有效状态信息。
输入表
| Id | sys1 | sys2 | sys3 | name | status | lifecycle |
|---|---|---|---|---|---|---|
| 1 | 11 | Roy | Active | C | ||
| 1 | 33 | Roy | ||||
| 2 | 111 | Mic | ||||
| 2 | 222 | Mic | Active | C | ||
| 2 | 333 | Mic | Active | C | ||
| 3 | 1111 | Jim | FC | |||
| 4 | 11111 | James | ||||
| 4 | 33333 | James | Inactive | FC |
期望输出表
| Id | sys1 | sys2 | sys3 | name | status | lifecycle |
|---|---|---|---|---|---|---|
| 1 | 11 | 33 | Roy | Active | C | |
| 2 | 111 | 222 | 333 | Mic | Active | C |
| 3 | 1111 | Jim | FC | |||
| 4 | 11111 | 33333 | James | Inactive | FC |
内容的提问来源于stack exchange,提问作者Abhi
相关产品推荐
相关产品推荐

