选择一行而不是具有相同ID和不同值的多行

时间:2016-01-22 12:49:13

标签: sql sql-server tsql

我有一个问题是否有人知道如何从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

1 个答案:

答案 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)