SQL Server:删除多行空值

时间:2017-09-22 18:44:31

标签: sql sql-server

我有一张这样的表:

Result  Col1    Col2    Col3
-----------------------------
Row1    null     1      null
Row1     2      null    null
Row1    null    null     3
Row1     1      null    null
Row1    null     2      null
Row1    null    null     3

我希望得到像

这样的结果
Result  Col1    Col2    Col3
-----------------------------
Row1    2        1       3
Row1    1        2       3

如何在SQL Server表中完成此操作?我知道如果我使用Col1,Col2,Col3的MAX,我将只获得一行。但我需要得到两行。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

这很棘手。您可以使用row_number()为每个值分配一个顺序值,然后进行汇总。

您的数据缺乏排序 - SQL表表示无序集。假设您有一个排序列,并且每行只有一个非NULL值:

select t.result, max(col1) as col1, max(col2) as col2, max(col3) as col3
from (select t.*,
             row_number() over (partition by case when col1 is not null then 1
                                                  when col2 is not null then 2
                                                  when col3 is not null then 3
                                order by ?  -- the ordering column
                               ) as seqnum
      from t
     ) t
group by t.result, seqnum;

如果每行可以有多个非NULL值,则问题定义不明确。提出另一个问题并提供样本数据和预期结果。