2017-06-16 56 views
-2

我的數據庫看起來是這樣的:的Oracle SQL計數山坳值

+-----+----------+-----------+----------+ 
+ ID + col1 + col2 + col 3 + 
+-----+----------+-----------+----------+ 
+ 1 + Y  + N  +  Y + 
+-----+----------+-----------+----------+ 

我想已經是Y的percantage相比於N,例如Y = 2,N = 1 - > 75%

我可以在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);