我有一张这样的表:
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
,我将只获得一行。但我需要得到两行。
我该怎么做?
答案 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
值,则问题定义不明确。提出另一个问题并提供样本数据和预期结果。