Проблема синтаксиса SQL с получением суммы

#sql #sql-server #sql-server-2005 #syntax

#sql #sql-сервер #sql-server-2005 #синтаксис

Вопрос:

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

Таблица IDAssoc содержит столбцы bill_id , year , area_id .

Таблица Bill содержит столбцы bill_id , year , main_id и amount_due .

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

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

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

 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 с суммированным значением amount_due. area_id находится только в таблице assoc, а не в таблице bill.

Комментарии:

1. Возможно, вы захотите опубликовать любой SQL, который вы пробовали до сих пор.

2. Можете ли вы показать свои текущие данные и желаемые результаты?

Ответ №1:

 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. Это все еще возвращает отдельные строки и не суммирует мои данные. Необходимо суммировать все счета в каждом area_id и возвращать его в одной строке с соответствующим area_id. Это возвращает, например, 4 строки с произвольными суммами и одним и тем же area_id, когда это должна быть одна строка и один area_id. На самом деле существует 4-5 разных area_ids, которым необходимо суммировать несколько связанных счетов.

2. Левое соединение также не помогло, по-прежнему возвращает несколько строк для каждого area_id, когда они должны быть суммированы.

3. Моя ошибка, я пропустил group by предложение

4. Это сработало, у меня действительно был правильный запрос, но я включил сумму в group by, и это все испортило. Я все еще учусь, и теперь это имеет смысл, но спасибо, что помогли мне добраться до этого момента. Теперь это работает.

Ответ №2:

Вам не хватает 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
  

Комментарии:

1. У меня есть group by, я включил причитающуюся сумму в group by вместе с идентификатором области, и это все испортило, когда я убрал это из группы, поскольку мой исходный запрос сработал. Спасибо за вашу помощь, чтобы я мог разобраться в этом.