Деление на 0 в SQL Server - PullRequest
       2

Деление на 0 в SQL Server

0 голосов
/ 28 июня 2019

Как решить проблему деления на ноль?

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

Пожалуйста, помогите мне, где я делаю ошибку?

SELECT
    SO_VInv.AccountNo, SUM(SO_VInv.LineCost) AS "Cost Price", 
    COUNT(SO_VInv.QuantityThisDel) AS Quantity, COUNT(SO_VInv.InvoiceNo) AS "Number of Invoices", 
    SUM(SO_VInv.CurrentLineTotal) AS "Sale Price", SUM(SO_VInv.CurrentLineTotal) -  SUM(SO_VInv.LineCost) - SUM(SO_VInv.TaxToCharge) AS "Gross Profit",
    SUM(SO_VInv.CurrentLineTotal) - SUM(SO_VInv.LineCost) - SUM(SO_VInv.TaxToCharge) / (SUM(SO_VInv.LineCost) - SUM(SO_VInv.TaxToCharge)
FROM 
    SO_VInv
WHERE
    InvDate >= '2019-01-01'
GROUP BY
    SO_VInv.AccountNo

Выше строки работают нормально, но эта часть вызывает проблему

    SUM(SO_VInv.CurrentLineTotal) - SUM(SO_VInv.LineCost) - SUM(SO_VInv.TaxToCharge) / (SUM(SO_VInv.LineCost) - SUM(SO_VInv.TaxToCharge)
FROM 
    SO_VInv
WHERE
    InvDate >= '2019-01-01'
GROUP BY
    SO_VInv.AccountNo

Я пытался решить эту проблему, как это, но все еще получаю ошибки

DECLARE @SalePrice DECIMAL
DECLARE @Tax DECIMAL
DECLARE @CostPrice DECIMAL
DECLARE @Profit DECIMAL
DECLARE @Quantity DECIMAL
DECLARE @Final DECIMAL

SET @SalePrice = (SELECT(SUM(SO_VInv.CurrentLineTotal)) FROM SO_VInv )
SET @Tax = (SELECT(SUM(SO_VInv.TaxToCharge)) FROM SO_VInv )
SET @CostPrice = (SELECT(SUM(SO_VInv.LineCost)) FROM SO_VInv )
SET @Profit = (SELECT(@SalePrice-@Tax) FROM SO_VInv )
SET @Quantity = (SELECT COUNT(SO_VInv.QuantityThisDel)FROM SO_VInv )
SET @Final = (SELECT @SalePrice AS "SalePrice"
              FROM SO_VInv
              WHERE InvDate >= '2019-01-01'
              GROUP BY SO_VInv.AccountNo)

SELECT @Final

Делить на ноль ошибок

Я пробовал много возможных решений, которые я нашел в Интернетевключая метод объявления и установки переменной и т. д.

Ответы [ 2 ]

2 голосов
/ 28 июня 2019

Использование nullif():

select x / nullif(y, 0)

Это вернет null, а не выдаст ошибку.

Для вашего конкретного заявления:

SUM(SO_VInv.CurrentLineTotal) - SUM(SO_VInv.LineCost) - SUM(SO_VInv.TaxToCharge) / NULLIF(SUM(SO_VInv.LineCost) - SUM(SO_VInv.TaxToCharge), 0)
0 голосов
/ 28 июня 2019

Вы можете использовать оператор case, например case, когда значение деления = ноль, затем 0, иначе вычисление end

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...