2017-06-16 8 views
-2

私のデータベースは次のようになります値Y = 2、N = 1 - > 75%OracleのSQLカウントcolが

SQLでこれを行うことはできますか?

+2

これまでに何を試みましたか?また、Y = 2、N = 1からどのように75%を得るのですか? – Aleksej

+1

'Y = 66.666600'と' N = 33.333300'でなければならない –

+0

また、列にはY/Nしかありませんか?ヌル値を持つことは可能ですか? – Aleksej

答えて

1

私はこのようにそれを小文字になります。

select ID, 
     floor((case when col1 = Y then 1 else 0 end + 
       case when col2 = Y then 1 else 0 end + 
       case when col3 = Y then 1 else 0 end)* 100/3) as pc_Y 
from MyTable 
0

デコードはそれを行うことができます。しかし、すでにコメントとしてNULLの値について尋ねられたように、私はNULLが存在することが想定されており、すべての値に 'X'または 'Y'を指定することはできません。

SELECT ID, 
     DECODE (xy_val, 
       0, 'N/A', 
       ROUND ((y_val/x_val) * 100) 
      ) y_to_x_percent 
    FROM (SELECT ID, 
       ( DECODE (NVL (col1, 0), 'Y', 1, 0) 
       + DECODE (NVL (col2, 0), 'Y', 1, 0) 
       + DECODE (NVL (col3, 0), 'Y', 1, 0) 
       ) y_val, 
       ( DECODE (NVL (col1, 0), 'Y', 1, 'X', 1, 0) 
       + DECODE (NVL (col2, 0), 'Y', 1, 'X', 1, 0) 
       + DECODE (NVL (col3, 0), 'Y', 1, 'X', 1, 0) 
       ) xy_val 
      FROM my_table); 
関連する問題