假设我有下表,其中包含唯一ID和4个属性列...
|ID| |Attribute 1| |Attribute 2| |Attribute 3| |Attribute 4|
1 RED NULL BLUE GREEN
2 NULL BLUE GREEN NULL
3 GREEN YELLOW NULL BLUE
4 YELLOW NULL NULL GREEN
我可以在SQL Server 2014中使用什么来说:如果属性1为NULL,则使用属性2,但如果属性2为NULL,则使用属性3,依此类推......我将使用CASE语句,但是我不确定如何超越CASE WHEN属性1是空的那么属性2,但那么如果属性2是NULL呢?然后,我如何选择非NULL的下一列值?
我想以某种方式得到上述内容,对此......
|ID| |Attribute 1| |Attribute 2| |Attribute 3| |Attribute 4|
1 RED BLUE GREEN NULL
2 BLUE GREEN NULL NULL
3 GREEN YELLOW BLUE NULL
4 YELLOW GREEN NULL NULL
答案 0 :(得分:2)
这很痛苦,但在SQL Server中,您可以使用outer apply
和其他一些逻辑:
select t.id,
v.attribute1, v.attribute2, v.attribute3, v.attribute4
from t outer apply
(select max(case when seqnum = 1 then a end) as attribute1,
max(case when seqnum = 2 then a end) as attribute2,
max(case when seqnum = 3 then a end) as attribute3,
max(case when seqnum = 4 then a end) as attribute4
from (select v.*, row_number() over (order by n) as seqnum
from (values (1, t.attribute1), (2, attribute2), (3, t.attribute3), (4, t.attribute4)
) v(n, a)
where a is not null
) v
) v;
这将对数据进行分离,然后重新生成值。
答案 1 :(得分:0)
isNull
有两个参数:表达式和后备。您需要使用isNull
次呼叫的组合:
isNull(attribute1, isNull(attribute2, isNull(attribute3, attribute4)))