Случай Когда невозможно определить равные значения

Я пытаюсь подтвердить, что значения, вычисляемые моей базой данных, верны. Запрос, который я написал, дает мне эту информацию. Столбец Pull_through создается базой данных, а столбец, помеченный как CalcQuantity, — это то, что я использую для проверки базы данных.

SELECT RPT.PayPeriod
      ,RPT.Employee_Id
      ,RPT.Plan_Id
      ,RPT.Commission
      ,Pull_through
      ,Modifier
      ,ROUND(Commission * Modifier,2) AS CalcQuantity
      ,CASE WHEN Pull_through = Commission * Modifier then 'Correct'
            WHEN Pull_through <> Commission * Modifier then 'ERROR'
            END AS Confirmed
FROM Compensation..IN_Pullthrough PULL
 left join RPT
  on PULL.Employee_id = RPT.Employee_Id and PULL.Pay_Date = RPT.PayPeriod
WHERE PULL.Pay_Date = '2016-02-12'

Расчет работает, что я смог подтвердить визуально, но оператор CASE WHEN работает неправильно. Первоначально я думал, что это потому, что мне нужно было округлить десятичные разряды, но подтвержденные результаты по-прежнему показывают «ОШИБКА» для любого значения, которое не имеет нуля. Я предоставил скриншот соответствующих столбцов, чтобы вы могли увидеть результаты запроса.

введите здесь описание изображения

Является ли проблема с CASE WHEN из-за нулей или округление не делает результаты равными в соответствии с SQL?

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

Заранее спасибо!


person MHeath    schedule 26.02.2016    source источник
comment
Пожалуйста, покажите нам исходные данные.   -  person Tim Biegeleisen    schedule 26.02.2016
comment
вы сравниваете число с плавающей запятой?   -  person Magnus    schedule 26.02.2016


Ответы (1)


Этот ответ немного умозрительный, но вы можете попробовать сравнить левую и правую части вашего оператора CASE только до второго десятичного знака:

CASE WHEN ROUND(Pull_through, 2) = ROUND(Commission * Modifier, 2)
    THEN 'Correct'
    ELSE 'ERROR'
END AS Confirmed
person Tim Biegeleisen    schedule 26.02.2016
comment
Хорошо, что сделал это. Должен был подумать об этом, я думаю. Спасибо! - person MHeath; 26.02.2016