我的数据库看起来像这样:
+-----+----------+-----------+----------+
+ ID + col1 + col2 + col 3 +
+-----+----------+-----------+----------+
+ 1 + Y + N + Y +
+-----+----------+-----------+----------+
我想要的是Y与N相比的优势,例如: Y = 2,N = 1 - > 75%
我可以在SQL中执行此操作吗?
答案 0 :(得分: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
答案 1 :(得分: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);