Страницы: 1
RSS
Запрос SQL: построение перечня уникальных значений и вывод общей суммы по каждому
 
Добрый день!
Пытаюсь сделать запросом SQL таблицу на основе базы  данных, в которой за нужный мне период будут показаны все имена и  соответствующие им суммы. При этом, имена перечисляются все, которые  есть в базе, а суммы указываются только для тех имен, по которым в этот  период были начислены суммы. Пример в приложении (лист "Загрузка  данных", а с первого листа можно загрузить таблицу в базу Db.accdb).
Написал вот такой запрос:    
Код
SQLstr = "SELECT t1.[Имя], t2.[Сумма] FROM [" & dbTableName & "] AS t1 " & _     
"LEFT JOIN (SELECT t.[Период], t.[Имя], t.[Сумма] FROM [" & dbTableName & "] t WHERE t.[Период] > #02/01/2019#) AS t2 " & _     
"ON t1.[Имя] = t2.[Имя] GROUP BY t2.[Период], t1.[Имя], t2.[Сумма]"
Но он выводит имена то количество раз, которое они  встречались в периоде. Если делаю сумму по полю, она многократно  дублируется. Помогите исправить запрос, чтобы компоновал нужную таблицу.
Спасибо.
Изменено: Ungrateful - 22.10.2019 23:55:29
 
Естественно суммировать то что нужно и Group by по именам
Изменено: БМВ - 23.10.2019 07:42:00
По вопросам из тем форума, личку не читаю.
 
БМВ, у меня Group by по именам стоит в конце. Если делаю в первом блоке, выдает ошибку.
 
пардон, не заметил, но убегаю на работу, только позже смогу взглянуть.
Изменено: БМВ - 23.10.2019 07:57:44
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо, я тоже свежим взглядом на работе посмотрю. Выяснил из статей, что точно надо суммировать и точно дополнительно группировать в Джоине )
 
Мне кажется все просто в пропуске.
SQLstr = "SELECT t1.[Имя], t2.[Сумма] FROM [" & dbTableName & "] AS t1 " & _
"LEFT JOIN (SELECT t.[Период], t.[Имя], t.[Сумма] FROM [" & dbTableName & "] AS  t WHERE t.[Период] > #02/01/2019#) AS t2 " & _
"ON t1.[Имя] = t2.[Имя] GROUP BY t2.[Период], t1.[Имя], t2.[Сумма]"

Цитата
Ungrateful написал:
дополнительно группировать в Джоине
иногда смысл будет, но это не обязательно.
Изменено: БМВ - 23.10.2019 09:27:09
По вопросам из тем форума, личку не читаю.
 
БМВ, проверил, AS никак не повлияло на результат, но зато каким-то чудом удалось добить запрос. Получилось вот так:
Код
SQLstr = "SELECT t1.[Имя], SumT2 FROM [" & dbTableName & "] AS t1 " & _
"LEFT JOIN (SELECT t.[Имя], SUM(t.[Сумма]) as SumT2 FROM [" & dbTableName & "] t " & _
"WHERE t.[Период] > #02/01/2019# GROUP BY t.[Имя]) AS t2 ON t1.[Имя] = t2.[Имя] GROUP BY t1.[Имя], SumT2"
то есть, добавил Group by в блок с Left Join, в джоине сразу сделал сумму по полю Сумма и дал ей псевдоним, который использовал в основной выборке.
Страницы: 1
Наверх