トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-254 nullでない列の数でソート

SQLパズル

test_t
NO  Col1  Col2  Col3  Col4  Col5
--  ----  ----  ----  ----  ----
 1  null  A     null  null  B
 2  null  C     D     E     F
 3  G     H     I     J     K
 4  null  L     null  null  null
 5  null  null  null  null  null

行ごとの、
Col1,Col2,Col3,Col4,Col5のnullでない列の数を求め、
その値の降順で出力する。

出力結果
NO  CNT
--  ---
 3    5
 2    4
 1    2
 4    1
 5    0

こちらを参考にさせていただきました


データ作成スクリプト

create table test_t(
NO   number(1),
Col1 char(1),
Col2 char(1),
Col3 char(1),
Col4 char(1),
Col5 char(1));

insert into test_t values(1,null,'A' ,null,null,'B' );
insert into test_t values(2,null,'C' ,'D' ,'E' ,'F' );
insert into test_t values(3,'G' ,'H' ,'I' ,'J' ,'K' );
insert into test_t values(4,null,'L' ,null,null,null);
insert into test_t values(5,null,null,null,null,null);
commit;


SQL

select NO,
nvl2(Col1,1,0)+
nvl2(Col2,1,0)+
nvl2(Col3,1,0)+
nvl2(Col4,1,0)+
nvl2(Col5,1,0) as cnt
  from test_t
order by cnt desc;


解説

列別名にdescを指定して、降順に出力してます。