计算表之间的百分比变化

时间:2009-07-20 09:58:29

标签: sql oracle10g

我是SQL脚本的新手。我试图找出一个设计问题,涉及一些算术计算。

我有两个表temp1和temp2有两列 帐号,(两个表中共同) balance(浮点数据类型)。

  1. 我想比较temp1和temp2中的余额列。 打印出来的。帐户和匹配和不匹配的百分比。
  2. 输出a / c nos。其余额与单独的表格不匹配..
  3. 我的另一个问题是,如果特定字段中的值除以0,sql如何处理计算?

    任何帮助,都会让我开始。

    由于


    我尝试了以下内容:

    SELECT T1.AcountNo, T1.Balance, T2.Balance, 
           T1.Balance/CASE T2.Balance WHEN 0 THEN NULL END) 
    FROM Temp1 T1, Temp2 T2
    WHERE 
      T1.AccountNo = T2.AccountNo
    AND 
      ((T1.Balance / T2.Balance > 1.1) OR
       (T1.Balance / T2.Balance < 0.9))
    

    但我仍然无法规避零除数问题。

2 个答案:

答案 0 :(得分:0)

对于第一个查询,我会使用类似的东西,它打印两个余额的比率:

SELECT T1.AcountNo, T1.Balance, T2.Balance, T1.Balance / T2.Balance
FROM Temp1 T1, Temp2 T2
WHERE 
T1.AccountNo = T2.AccountNo

对于第二个查询,我会使用类似这样的东西,它返回差异超过10%的所有帐户:

SELECT T1.AcountNo, T1.Balance, T2.Balance, T1.Balance / T2.Balance
FROM Temp1 T1, Temp2 T2
WHERE 
T1.AccountNo = T2.AccountNo
AND 
((T1.Balance / T2.Balance > 1.1)
OR
(T1.Balance / T2.Balance < 0.9))

答案 1 :(得分:0)

SELECT T1.AcountNo, T1.Balance, T2.Balance, 
       DECODE( NVL(T2.Balance, 0), 0, 0, T1.Balance, T2.Balance)
FROM Temp1 T1, Temp2 T2 
WHERE T1.AccountNo = T2.AccountNo 
  AND ((T1.Balance / T2.Balance > 1.1) OR (T1.Balance / T2.Balance < 0.9))

˙DECODE`函数的定义如下:

decode( expression , search , result [, search , result]... [, default] )

所以,在上面的代码中它的工作原理如下:

  • NVL() - 如果T2.Balance为NULL,则将其转换为0
  • 如果T2.Balance为0,则返回0
  • 否则将T1.Balance与T2.Balance划分