SQL возвращает неправильное значение (?) - PullRequest
0 голосов
/ 24 сентября 2019

Оператор SQL с формулой возвращает неправильное значение в столбце.То, что я пытаюсь сделать, это рассчитать абсолютное значение на основе нескольких условий.Во-первых, когда в параметре risk_class указано «Недостаточно образцов» или «Обычная цена», абсолютное значение должно быть равно нулю.Во-вторых, когда разница между режимом и ценой меньше нуля, абсолютное значение должно быть равно нулю.Если все эти условия не выполняются, то risk_abs должен быть разницей между режимом и ценой, умноженной на столбец количества, соответствующий строке.

UPDATE dbo.import_company
SET risk_abs = ROUND(t.risk_abs, 0)
FROM (
        SELECT invoice_ref, risk_class, modus, price, quantity, 
        CASE
            WHEN risk_class = 'Onvoldoende observaties' THEN 0
            WHEN risk_class = 'Gefactureerd tegen reguliere prijs' THEN 0
            WHEN (modus - price) < 0 THEN 0
            ELSE (modus - price) * quantity
        END AS risk_abs
        FROM dbo.import_company
)
t WHERE t.invoice_ref = dbo.import_company.invoice_ref


SELECT invoice_ref, article_code, quantity, price, modus, risk_class, risk_abs
FROM dbo.import_company
WHERE risk_class = 'Gefactureerd tegen reguliere prijs'

Я не понимаю, почему мой результат отличается,и формулы не работают.См. Ниже

Image example

Я не понимаю, как рассчитывается 140 и почему он игнорирует все утверждения?

Любые советы и советына то, что я делаю неправильно, добро пожаловать!

1 Ответ

4 голосов
/ 24 сентября 2019

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

UPDATE dbo.import_company
SET risk_abs = ROUND(CASE
        WHEN risk_class = 'Onvoldoende observaties' THEN 0
        WHEN risk_class = 'Gefactureerd tegen reguliere prijs' THEN 0
        WHEN (modus - price) < 0 THEN 0
        ELSE (modus - price) * quantity
    END, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...