我已经尝试了一些针对此问题在Stack上发布的各种解决方案,但它们都没有保留空值(似乎整个查询都是基于这个假设构建的)。
我有一个包含100万行的表。有10列。第一列是id。每个ID都是" item" (在我的情况下是销售订单)但有多行。每行都是完全null或在其中一列中具有单个值。没有两个具有相同ID的行具有同一列的数据。我需要根据ID将这些多行合并为一行。但是,我需要保留空值。如果第一列在所有行中都为null,我需要将其保留在最终数据中。
有人可以帮我解决这个问题,我现在已经坚持了2个小时。
id - Age - firstname - lastname
1 13 null null
1 null chris null
应输出
1 13 chris null
答案 0 :(得分:3)
听起来你想要一个聚合查询:
select id, max(col1) as col1, max(col2) as col2, . . .
from t
group by id;
如果所有值均为NULL
,则会生成NULL
。如果其中一行(对于id
)有一个值,那么这将产生该值。
答案 1 :(得分:2)
select id, max(col1), max(col2).. etc
from mytable
group by id
答案 2 :(得分:1)
正如其他人所提到的,你应该使用聚合查询来实现这一点。
select t1.id, max(t1.col1), max(t1.col2)
from tableone t1
group by t1.id
这应该返回null。如果您在处理空值时遇到问题,可以使用ISNULL()实现一些逻辑。确保您的数据字段确实为空,而不是空字符串。
如果没有返回空值,请检查以确保具有特定ID的每一行都只有空值。如果其中一个返回一个空字符串,则是,它将删除null并返回null上的任何其他内容。