我有一个问题是否有人知道如何从SQL表中获取此信息
id | value1 | value2 | value3
1 1 null null
1 1 2 null
1 1 5 6
2 2 null null
2 3 5 null
3 7 null null
3 6 0 8
结果应该是
id | value1 | value2 | value3
1 1 5 6
2 3 5 null
3 6 0 8
编辑:结果应该是我有更多项目(value1,value2,value3)填充
的行edit2:上面的表格是之前一些查询的结果。我有两行或多行填充相同的值字段然后我应该得到所有这些行,但如果没有那么我应该只获得更多数据字段的行。值的重要性从右到左
请注意。我使用MSSQL
答案 0 :(得分:2)
执行GROUP BY id
只获取每个ID一次。使用MIN
(或者MAX
)为id选择一个value1等。
select id,
min(value1) as value1,
max(value2) as value2,
min(value3) as value3
from tablename
group by id
修改强>
使用公用表表达式(cte),其中还计算非空数 每行的值。返回具有该id的最大计数的所有cte行。
with cte as
(
select t.*, case when value1 is null then 0 else 1 end +
case when value2 is null then 0 else 1 end +
case when value3 is null then 0 else 1 end as valcount
from tablename
)
select t1.id, t1.value1, t1.value2, t1.value3
from cte t1
where t1.valcount = (select max(valcount) from cte t2 where t1.id = t2.id)