【发布时间】:2012-08-17 16:45:15
【问题描述】:
我在Oracle中的表是这样的
Col Col1 Col2 Col3 ColR
-- ---- ---- ---- ----
30 73 40 null -10
60 32 null 20 40
90 80 null null 10
80 45 81 30 50
我也可以在上面的列中设置 0 而不是 null。 我需要从 Col1、Col2、Col3 中找到最小值,忽略 null 或 0,并通过从 Col 中减去来填充 ColR。
编辑: 我写了一个 CASE 语句,由于我的表中的空值而不起作用。
SELECT col,col1,col2,col3,
CASE
WHEN Col1 < Col2 AND Col1 < Col3
THEN Col - Col1
WHEN Col2 < Col1 AND Col2 < Col3
THEN Col - Col2
ELSE Col - Col3
END ColR
FROM
(SELECT col,col1,
CASE
WHEN col22 IS NULL
THEN NULL( i can also SET TO 0 but it will mess WITH my other calculation TO find MIN)
ELSE ROUND( 100* ( (col22) / (col44)))
END col2 ,
CASE
WHEN col33 IS NULL
THEN NULL
ELSE ROUND( 100* ( (col33) / (col44)))
END col3
FROM TABLE
)
我刚刚在我的选择查询中包含了 case 语句。所有列值都从另一个查询中填充。
【问题讨论】:
-
如果所有三列都为空(或 0)会怎样?
-
50 - 40 = -10 是错字吗?
-
另外,你至少可以在case语句之外提取
col的提及。