2009-07-20 86 views
1

我是SQL腳本編程的新手。我試圖找出一個涉及一些算術計算的設計問題。計算表之間的百分比變化

我有兩個表temp1和temp2與兩列 帳戶號,(兩個表中共同) 餘額(浮動數據類型)。

  1. 我想比較temp1和temp2中的餘額列。 打印出沒有。的帳戶和匹配和不匹配的百分比。
  2. 輸出a/c編號。其餘額不匹配成一個單獨的表..

我的另一個問題是,如果特定字段中的值除以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)) 

但我仍然無法規避零除數問題。

回答

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
  • 其他用T2.Balance分配T1.Balance
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)) 
+0

只是想知道。爲什麼不以((T1.Balance/T2.Balance)!= 1)替換((T1.Balance/T2.Balance> 1.1) 或(T1.Balance/T2.Balance <0.9))? 有機會,你可能有帳戶在1.1和0.9之間;) – Guru 2009-07-20 13:47:21

+0

@大師 - 這是寬容的整個想法。如果一個表格顯示帳戶X的餘額爲1000,另一個表格顯示爲1000.1,是否有問題?可能是,取決於你的應用程序。如果數字必須嚴格,那麼你是正確的,但如果我正確地理解了這個問題,他需要一個寬容。如果10%太寬,他可以使用1.0001和0.9999,沒問題,這取決於應用程序。 – 2009-07-20 15:03:52