Суммирование подробных записей в инструкции SQL Master Detail - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть две таблицы

Master  
Detail

В таблице Master & Detail у меня есть поле Amount

Мне нужно получить сумму суммы в деталях и вычесть ее изСумма в Master и отображение в «Current_Amount»

«Current_Amount» должно равняться «Master.Amount» - сумма «Detail.Amount»

Ответы [ 3 ]

3 голосов
/ 15 февраля 2012

Не имея тонны деталей в двух таблицах, это даст вам общую сумму:

SELECT (Max(M.Amount) - SUM(D.Amount)) as CurrentAmount
FROM Master M
INNER JOIN Detail D
    ON M.ID = D.ID

Тогда, если вы хотите, чтобы основной идентификатор был включен:

SELECT M.ID, (Max(M.Amount) - SUM(D.Amount)) as CurrentAmount
FROM Master M
INNER JOIN Detail D
    ON M.ID = D.ID
GROUP BY M.ID
1 голос
/ 15 февраля 2012

Это делает предположения об условии соединения, так как вы не указали ...

SELECT     Master.ID,
           (MAX(Master.Amount) - ISNULL(SUM(Detail.Amount), 0)) AS Current_Amount
FROM       Master
LEFT JOIN  Detail ON Detail.MasterID = Master.ID
GROUP BY   Master.ID

Примечание: MAX(Master.Amount) просто устраняет необходимость указывать Master.Amount в выражении group by.

1 голос
/ 15 февраля 2012

Попробуйте:

select m.ID, max(m.Amount) - sum(d.Ammount) Current_Amount
from Master m
left join Detail D on m.ID = d.Master_ID
group by m.ID

- при условии, что идентификатор первичного ключа мастера сохраняется в Detail как Master_ID.

...