Добрый день! Пытаюсь сделать запросом 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.[Сумма]"
Но он выводит имена то количество раз, которое они встречались в периоде. Если делаю сумму по полю, она многократно дублируется. Помогите исправить запрос, чтобы компоновал нужную таблицу. Спасибо.
Мне кажется все просто в пропуске. 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 написал: дополнительно группировать в Джоине
БМВ, проверил, 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, в джоине сразу сделал сумму по полю Сумма и дал ей псевдоним, который использовал в основной выборке.