У меня есть три таблицы что-то вроде следующего:
Customer (CustomerID, AddressState)
Account (AccountID, CustomerID, OpenedDate)
Payment (AccountID, Amount)
Таблица платежей может содержать несколько платежей для учетной записи, а клиент может иметь несколько учетных записей.
Я хотел бы получить общую сумму всех платежей по штатам по месяцам и месяцам. Э.Г.
Opened Date| State | Total
--------------------------
2009-01-01 | CA | 2,500
2009-01-01 | GA | 1,000
2009-01-01 | NY | 500
2009-02-01 | CA | 1,500
2009-02-01 | NY | 2,000
Другими словами, я пытаюсь выяснить, какие штаты платят больше всего за каждый месяц. Меня интересует только месяц OpenedDate, но я получаю его как дату для последующей обработки. Я пытался получить все необходимые данные за один запрос.
Я пробовал что-то вроде:
select
dateadd (month, datediff(month, 0, a.OpenedDate), 0) as 'Date',
c.AddressState as 'State',
(
select sum(x.Amount)
from (
select p.Amount
from Payment p
where p.AccountID = a.AccountID
) as x
)
from Account a
inner join Customer c on c.CustomerID = a.CustomerID
where ***
group by
dateadd(month, datediff(month, 0, a.OpenedDate), 0),
c.AddressState
Предложение where включает некоторые общие элементы в таблицу Account. Запрос не будет работать, потому что a.AccountID не включен в статистическую функцию.
Правильно ли я подхожу к этому? Как я могу получить данные, которые мне нужны, чтобы рассчитать, какие клиенты в Штатах платят больше всего?