sql将许多行合并为一个

时间:2012-10-17 09:23:35

标签: mysql sql

我无法弄清楚如何在sql中进行以下选择:

表:

id score1 score2 score3
0  null   null   3
0  1      null   3
1  null   2      null

选择

id score1 score2 score3
0  1      null   3
1  null   2      null

谢谢,

詹姆斯

2 个答案:

答案 0 :(得分:2)

使用MAX

汇总值
SELECT ID, 
       MAX(score1) score1,
       MAX(score2) score2,
       MAX(score3) score3
FROM tableName
GROUP BY ID

答案 1 :(得分:1)

这是基于选择具有比相同ID的任何其他行更多分数的行。保留“最佳”数据,如果你愿意的话。

select id, score1, score2, score3
from (
    select *,
       rn=row_number() over (partition by id
                             order by
                                case when score1 is not null then 1 else 0 end
                                +
                                case when score2 is not null then 1 else 0 end
                                +
                                case when score3 is not null then 1 else 0 end desc)
    from tbl
) x
where rn=1

e.g。

id score1 score2 score3
0  null   4      null
0  1      null   3         <<< keep
1  null   2      null

当然,你可能更喜欢John的答案,它会使ID = 0的行(0,1,4,3)。