假设我的桌子是这样的
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 &最后一个空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我将在SAS基础中使用PROC SQL
发布于 2016-04-23 19:27:45
您可以使用函数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 myTableCOALESCE选择第一个非空值,因此在开始的情况下,确保将列从1传递到4,并以相反的顺序传递给end。
https://stackoverflow.com/questions/36815341
复制相似问题