SQL中如何筛选无NULL值行并将结果合并为单行
搞定SQL提取非NULL值并合并为单行的需求
嘿,这个需求我熟!咱们先把你的示例数据整理得更清晰些,方便理解:
| REF | Priority | owner | server |
|---|---|---|---|
| 1234 | LOW | NULL | NULL |
| 4567 | NULL | NULL | WINDOWS |
| 8907 | NULL | root | NULL |
你的目标是把每个列里唯一的非NULL值提出来,合并成这样一行结果:
| REF | Priority | owner | server |
|---|---|---|---|
| 1234 | LOW | root | WINDOWS |
最简单的实现方案
用SQL的聚合函数MAX()或者MIN()就能轻松搞定!这类聚合函数会自动忽略NULL值,刚好匹配你的场景——每个列只有一个非NULL有效值。
直接可用的SQL代码
SELECT MAX(REF) AS REF, MAX(Priority) AS Priority, MAX(owner) AS owner, MAX(server) AS server FROM your_table_name; -- 记得把这里换成你的实际表名
为啥这个方案好用?
MAX()会跳过所有NULL行,只统计非NULL的数值/文本- 因为你的每个列只有一个有效非NULL值,
MAX()直接就能返回这个值(用MIN()效果也一样,只要列里只有一个非NULL值) - 如果后续某个列出现多个非NULL值,你可以根据业务需求调整(比如取最新的、最大的),但当前场景下这个方案最简洁高效
内容的提问来源于stack exchange,提问作者Shruthi J
相关产品推荐
相关产品推荐

