Проблема синтаксиса SQL с получением суммы - PullRequest
0 голосов
/ 11 октября 2011

Хорошо, у меня есть две таблицы.

В таблице IDAssoc есть столбцы bill_id, year, area_id.

В таблице Билл есть столбцы bill_id, year, main_id и amount_due.

Я пытаюсь получить сумму столбца amount_due из таблицы счетов для каждого из связанных area_ids в таблице IDAssoc.

Я делаю оператор выбора для выбора суммы и присоединения к bill_ids.Как я могу установить это так, чтобы он имел одну строку для каждого из связанных счетов в каждом area_id из таблицы сопоставления.С каждым area_id может быть связано три или четыре bill_id, и мне нужно, чтобы они суммировались для каждого и возвращались, чтобы я мог использовать этот выбор в другом выражении.У меня есть группа, настроенная для area_id, но она по-прежнему возвращает каждую строку и не суммирует их для каждого area_id.Я уже указал год и main_id в предложении where, чтобы вернуть нужные мне данные, но я не могу заставить сумму работать должным образом.Извините, я все еще учусь, и я не уверен, как это сделать.Спасибо!

Редактировать. По сути, запрос, который я пытаюсь до сих пор, в основном такой же, как приведенный ниже:

select a.area_id, sum(b.amount_due)
from IDAssoc a
inner join Bill b
on a.bill_id = b.bill_id
where Bill.year = 2006 and bill.bill_id = 11111

Это просто произвольные числа.Возвращаемые данные выглядят следующим образом: amount_due - area_id .05 1003 .15 1003 .11 1003 65 1004 55 1004

Мне нужна одна строка для каждого area_id с суммированной суммой.Аргумент area_id присутствует только в таблице сопоставлений, а не в таблице счетов.

Ответы [ 2 ]

2 голосов
/ 11 октября 2011
select a.area_id, sum(b.amount_due)
from IDAssoc a
inner join Bill b
on a.bill_id = b.bill_id
where b.year = 2006 and b.bill_id = 11111
group by a.area_id

Возможно, вы захотите изменить inner join на left join, если у одного IDAssoc может быть много или нет Bill:

select a.area_id, coalesce(sum(b.amount_due),0)
from IDAssoc a
left join Bill b
on a.bill_id = b.bill_id
where b.year = 2006 and b.bill_id = 11111
group by a.area_id
1 голос
/ 11 октября 2011

Вы пропустили предложение GROUP BY:

SELECT a.area_id, SUM(b.amount_due) TotalAmount
FROM IDAssoc a
LEFT JOIN Bill b
ON a.bill_id = b.bill_id
GROUP BY a.area_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...