2016-04-23 1 views
0

が私のテーブルには、私は私の結果のテーブルに見えるように最初の順位&に最後のヌルPOSを選択する以上のことから、このSQLクエリ最後の非ヌルnode.attribute /フィールドを選択し

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  

のように見えるとしましょうこの

Point-ID | Start | End 
---------|-------|------- 
P1  | a1 | a2  
P2  | b1 | b3  
P3  | c1 | c4  
P4  | d1 | d1 
P5  | e1 | e4 

任意のアイデアのようにどのようにそれを行うには?これまでのところ私は考えることができるものである私は、あなたが機能COALESCEでこれを行うことができSASベースに

+0

'start'の順序を入れ替える以外は、あなたのselect case文がうまくいくように見えますが、そうではありませんか? –

答えて

1

をPROCのSQLを使用しているつもりです

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 

psのようなもの:

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選択最初のNULL以外の値なので、開始する場合は、1から4までの列と末尾の列を必ず逆の順序で渡します。

+0

はい、どちらも動作..ありがとう http://sqlfiddle.com/#!9/a5b482/6&http://sqlfiddle.com/#!9/a5b482/5 – Moon

関連する問題