Я хочу рассчитать «баланс» для клиента в моем db.MS SQL: Расчет таблицы для каждого результата
Customer Table
-----------------
1 - Frank
2 - Bob
Invoice Table
---------------------------------------------------
id | customer_id | amount_due | credit_due
---------------------------------------------------
1 | 1 | $10 |
---------------------------------------------------
2 | 1 | | $6
---------------------------------------------------
Вот типичный оператор sql для поиска информации о клиентах.
SELECT id, name FROM CUSTOMER WHERE id = ?
Если я хочу, чтобы также получить баланс, я делаю это:
SELECT a.*, b.* FROM
(SELECT id, name FROM CUSTOMER WHERE id = ?) AS a,
(SELECT SUM(amount_due - credit_due) AS balance FROM INVOICE WHERE cus_id = ?) AS b
Запуск этого результата:
--------------------
id | name | balance
---------------------
1 | Frank | $4
Это прекрасно работает при получении только одного клиента, но что, если я хочу сделать более общий поиск? Как и загрузка ВСЕХ клиентов?
Это выход я хотел бы получить
--------------------
id | name | balance
---------------------
1 | Frank | $4
---------------------
2 | Bob | $0
Не должно ли это быть левым объединением? –
В моем «фактическом» коде я использую ISNULL(), чтобы поймать нулевые суммы и просто вернуть $ 0 – Hackmodford
, вы также должны «объединить» 'i.amount_due' .. не сумму' sum' ... 'sum (coalesce (i.amount_due, 0)) 'same with' credit_due' – JamieD77