Я пытаюсь получить ОСТАТОКАгрегатная функция возвращает неточные результаты
where balance = SUM(pod.Quantity) + SUM(iob.OpeningBalance)
Запрос возвращает следующий вывод:
ItemName Balance
------------------
Item1 35
, но он должен быть
ItemName Balance
------------------
Item1 25
Запрос:
SELECT
i.ItemName,
SUM(pod.Quantity) + SUM(iob.OpeningBalance) AS Balance
FROM
dbo.Items i
LEFT JOIN
dbo.PurchaseOrderDetails pod ON i.ItemID = pod.ItemID
LEFT JOIN
ItemOpeningBalances iob ON i.ItemID = iob.ItemID
GROUP BY
i.ItemName
Items
стол:
+--------+----------+
| ItemID | ItemName |
+--------+----------+
| 1 | Item1 |
+--------+----------+
ItemOpeningBalances
стол:
+-------------------+-----------------+-----------------+
| OpeningBalanceID | ItemID | OpeningBalance |
+-------------------+-----------------+-----------------+
| 1 | 1 | 10 |
+-------------------+-----------------+-----------------+
PurchaseOrderDetails
стол:
+-----------------------+--------+----------+
| PurchaseOrderDetailID | ItemID | Quantity |
+-----------------------+--------+----------+
| 1 | Item1 | 5 |
| 2 | Item1 | 10 |
+-----------------------+--------+----------+
его, потому что без 'группы by' запрос вернет 2 строки с начальным сальдо 10 в обоих рядах и количество, равное 5 и 10. Когда вы группируете начальный баланс, становится 20 в количестве 15. Поскольку обе эти вещи логически раздельны, вы должны разделить их по 2 запросам, а не группировать их вместе. – ughai
Hi ughai thanks – Ayman