Вычисление процентного изменения между таблицами - PullRequest
1 голос
/ 20 июля 2009

Я новичок в написании сценариев SQL. Я пытаюсь выяснить проблему проектирования, связанную с некоторыми арифметическими вычислениями.

У меня есть две таблицы temp1 и temp2 с двумя столбцами номер счета (общий в обеих таблицах) баланс (тип данных с плавающей запятой).

  1. Я хочу сравнить столбцы баланса в temp1 и temp2. распечатать номер учетных записей и процент совпадений и несоответствий.
  2. вывод номера кондиционера. чьи балансы не совпадают в отдельной таблице ..

Другой вопрос, который у меня возникает, как sql обрабатывает вычисления, если значение в определенном поле делится на 0?

Любая помощь, поможет мне начать.

Спасибо


Я попробовал следующее:

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 голосов
/ 21 июля 2009
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))
Функция

ECDECODE` определяется следующим образом:

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

Итак, в приведенном выше коде это работает так:

  • NVL () - если T2.Balance равен NULL, преобразовать его в 0
  • если T2.Balance равен 0, вернуть 0
  • иначе разделите T1. Баланс с T2. Баланс
0 голосов
/ 20 июля 2009

Для первого запроса я бы использовал что-то вроде этого, которое выводит соотношение двух балансов:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...