如何用SQL处理同表数据、消除NULL值并合并重复Code行?
能否用SQL查询把多行同Code的数据合并成单行无NULL值的结构?
现有数据表:
| Code | label1 | label2 | label3 |
|---|---|---|---|
| code1 | sth | null | null |
| code1 | null | sth2 | null |
| code1 | sth | null | sth3 |
| code2 | null | word1 | null |
| code2 | word2 | null | null |
| code2 | null | null | word3 |
目标是转换成每行Code唯一、无NULL值的表:
| Code | label1 | label2 | label3 |
|---|---|---|---|
| code1 | sth | sth2 | sth3 |
| code2 | word2 | word1 | word3 |
完全可以做到,最通用的方法是按Code分组,用聚合函数过滤NULL值。绝大多数SQL数据库都支持MAX()或MIN()来实现,因为这两个函数会自动忽略NULL,只保留非NULL的值。
示例SQL语句:
SELECT Code, MAX(label1) AS label1, MAX(label2) AS label2, MAX(label3) AS label3 FROM your_table_name -- 替换成你的实际表名 GROUP BY Code;
简单解释
GROUP BY Code把相同Code的行归为一组,每组只会输出一行结果;MAX(label1)会在当前Code分组里,挑出label1字段的非NULL值(如果同一分组里该字段有多个非NULL值且内容一致,就返回这个值;要是有不同值,得先确认业务逻辑是否允许,不过从你的示例看每个Code下每个label的非NULL值都是唯一的)。
如果你的数据库支持窗口函数,也能用COALESCE()配合窗口函数实现,但上面的GROUP BY加聚合函数的方法是最简洁高效、适配性最广的。
内容的提问来源于stack exchange,提问作者toch
相关产品推荐
相关产品推荐

