假设我的表看起来像这样
Point-ID | Pos-1 | Pos-2 | Pos-3 | Pos-4
---------|-------|-------|-------|-------
P1 | a1 | a2 | Null | NULL
P2 | b1 | b2 | b3 | NULL
P3 | c1 | c2 | c3 | c4
P4 | d1 | Null | Null | Null
P5 | e1 | e2 | e3 | e4
从上面我想选择第一个Pos&最后一个null pos,以便我的结果表看起来像这样
Point-ID | Start | End
---------|-------|-------
P1 | a1 | a2
P2 | b1 | b3
P3 | c1 | c4
P4 | d1 | d1
P5 | e1 | e4
知道怎么做吗?到目前为止,我能想到的是像
Select
Point-ID,
(CASE
WHEN Pos-4 is not null then Pos-4
WHEN Pos-3 is not null then Pos-3
WHEN Pos-2 is not null then Pos-2
WHEN Pos-1 is not null then Pos-1
ELSE null
END) as Start,
(CASE
WHEN Pos-4 is not null then Pos-4
WHEN Pos-3 is not null then Pos-3
WHEN Pos-2 is not null then Pos-2
WHEN Pos-1 is not null then Pos-1
ELSE null
END) as End
FROM myTable
p.s我将在SAS Base中使用PROC SQL
答案 0 :(得分:1)
您可以使用功能COALESCE
执行此操作:
SELECT Point-ID,
COALESCE(Pos-1, Pos-2, Pos-3, Pos-4) as Start,
COALESCE(Pos-4, Pos-3, Pos-2, Pos-1) as End
FROM myTable
COALESCE
选择第一个非空值,因此在开始的情况下,您确保将列从1传递到4,并以结尾 - 以相反的顺序传递。