2017-06-16 3 views
-2

meine Datenbank wie folgt aussieht:Oracle SQL Zählung col Werte

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

Was ich haben will, ist die percantage von Y im Vergleich zu N, z.B. Y = 2, N = 1 -> 75%

Kann ich dies in SQL tun?

+2

Was haben Sie bisher versucht? Wie bekommen Sie 75% von Y = 2, N = 1? – Aleksej

+1

Sollte es nicht 'Y = 66.666600' und' N = 33.333300' sein? –

+0

Und können Sie auch nur Y/N in den Spalten haben? Ist es möglich, Nullwerte zu haben? – Aleksej

Antwort

1

Ich würde es wie in diesem Fall:

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

Decode es tun kann. Aber wie bereits gefragt, was über Werte in Kommentaren, ich unter der Annahme, dass NULL existieren kann und es ist möglich, alle Werte weder 'X' oder '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);