首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择最后一个非空节点的SQL查询。属性/字段

选择最后一个非空节点的SQL查询。属性/字段
EN

Stack Overflow用户
提问于 2016-04-23 19:20:26
回答 1查看 21关注 0票数 0

假设我的桌子是这样的

代码语言:javascript
复制
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,这样我的结果表就像下面这样

代码语言:javascript
复制
Point-ID | Start | End   
---------|-------|-------
P1       | a1    | a2    
P2       | b1    | b3    
P3       | c1    | c4    
P4       | d1    | d1
P5       | e1    | e4   

知道怎么做吗?到目前为止,我能想到的是

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-23 19:27:45

您可以使用函数COALESCE来完成这一任务。

代码语言:javascript
复制
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,并以相反的顺序传递给end。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36815341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档