Получение десятичного значения 0.00 в SQL Server

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть следующий запрос в SQL Server,

 SELECT
    SUM(issue_count) AS incent_issued, 
    SUM(redeem_count) AS incent_redeemed,
    CAST(SUM(redeem_count) / NULLIF(SUM(issue_count), 0) AS decimal(18, 2)) AS incent_redemption_rate
FROM
    incent_summary
  

Я получаю следующий вывод:

 incent_issued   incent_redeemed incent_redemption_rate
-------------------------------------------------------
53742                  7205            0.00
  

Почему я получаю incent_redemption_rate значение 0.00? Я ожидаю, что оно будет равно 0.13.

Ответ №1:

SQL Server выполняет целочисленное деление, поэтому 1/2 является 0 , а не 0.5 . Я считаю, что самым простым решением является умножение на 1.0 :

 SUM(redeem_count) * 1.0/NULLIF(SUM(issue_count), 0)
  

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