我有表,有些列包含空值,我的任务是将所有NULL
值移到左侧,因此数值以相同的顺序从右向左移动。
(前)
Column1 Column2 Column3 Column4
--------------------------------------------
NULL 1 NULL 3
1 NULL 3 2
1 2 3 NULL
输出应为
Column1 Column2 Column3 Column4
--------------------------------------------
1 3 NULL NULL
1 3 2 NULL
1 2 3 NULL
答案 0 :(得分:1)
这很痛苦,但您可以使用outer apply
:
select t.id, v.*
from t outer apply
(select max(case when i = 1 then colval end) as col1,
max(case when i = 2 then colval end) as col2,
max(case when i = 3 then colval end) as col3,
max(case when i = 4 then colval end) as col4
from (select row_number() over (order by colnum) as i, v.*
from (values (1, t.col1), (2, t.col2), (3, t.col3), (4, t.col4)
) v(colnum, colval)
where colval is not null
) v
) v;
我应该注意到,进行此类转换的必要性表明您的数据模型较差。单独列中的值应该位于另一个表中,每个id
和每列有一行。