Общая идея того, что я пытаюсь сделать, заключается в следующем: выберите все плановые цены для заказа, затем вычтите из этой суммы все фактические цены по этому заказу.
Плановая цена и фактическая ценана разных столах.Когда у меня есть единая плановая цена и единственная фактическая цена, это прекрасно работает.Однако, когда у меня есть несколько плановых цен или несколько фактических цен, это дает мне странные результаты, как будто алгебра повторяется несколько раз.
Запрос:
SELECT PL.orderid, (SUM(PL.lineprice) - NVL(SUM(AC.lineprice),0)) AS
Difference FROM plans PL
LEFT JOIN actuals AC ON PL.orderid = AC.orderid
WHERE PL.customer IN (SELECT customer FROM ...)
GROUP BY PL.orderid
ORDER BY PL.orderid;
Результаты запроса:
Orderid Difference
X-1224 100
X-1226 80
X-1345 70000
X-1351 125000
X-1352 10000
Y-2403 190000
Моя таблица планов выглядит следующим образом:
Orderid Planned_Price
X-1224 100
X-1226 100
X-1345 105000
X-1351 100000
X-1352 10000
X-1352 50000
Y-2403 25000
Y-2403 100000
А моя фактическая таблица выглядит так:
Orderid Actual_Price
X-1226 20
X-1345 35000
X-1351 25000
X-1351 50000
X-1352 25000
Y-2403 25000
Y-2403 5000
Так что, похоже, работает, когда у меня есть толькоодна строка в каждой таблице или одна строка в планах и нет строк в фактических значениях , т. е. X-1224, X-1226 и X-1345 .
Однако результаты слишком высоки илислишком низко, когда у меня есть несколько строк с одинаковым OrderID в любой таблице , т. е. все остальные
Я в тупике, почему это так.Любые идеи приветствуются.
редактировать: Я хотел бы получить результаты, взяв в качестве примера Y-2403: (25000 + 100000) - (25000 + 5000) = 95000. Что яполучить вдвое больше, чем в 190000 году.