Доступ к запросу Distinct и Sum

Чтобы помочь мне подготовиться к походам, я создаю базу данных, в которой могу выбрать рецепты, которые хочу приготовить, и распечатать список ингредиентов, которые мне нужно взять с собой. У меня есть следующий запрос и результаты:

SQL, сгенерированный Access:

SELECT tblRecipeIngredients.IngredientID, tblIngredients.Cooler, tblIngredients.Ingredient, tblIngredients.UnitOfMeasure, tblRecipeIngredients.Quantity, tblRecipes.Planned
FROM tblIngredients INNER JOIN (tblRecipes INNER JOIN tblRecipeIngredients ON tblRecipes.RecipeID = tblRecipeIngredients.RecipeID) ON tblIngredients.IngredientID = tblRecipeIngredients.IngredientID
WHERE (((tblRecipes.Planned)=True))
ORDER BY tblIngredients.Cooler, tblIngredients.Ingredient;

Все идет нормально. Однако, поскольку некоторые ингредиенты используются в нескольких рецептах, для них имеется несколько строк. Для них я хотел бы иметь одну строку с общим количеством этого ингредиента. Я пробовал множество комбинаций DISTINCT, SUM, GROUP BY и т. д., но что бы я ни пытался, я получаю сообщение об ошибке, сообщающее, что какой-то столбец не включен как «часть агрегатной функции».

Есть ли способ заставить мой запрос и/или VBA делать то, что я хочу?

Пожалуйста, покажите вашу попытку запроса. В Access измените представление «Дизайн» на представление SQL и скопируйте этот текст, чтобы вставить его сюда, в область с форматированием кода.

Parfait 07.08.2024 00:59

Конечно, вы все еще не используете Access 2010 и больше не поддерживается Microsoft.

Parfait 07.08.2024 00:59

@Parfait: я добавил SQL. У меня Access 2010 работает нормально, независимо от того, поддерживает его MS или нет.

gr8dane 07.08.2024 01:12

Пожалуйста, опубликуйте попытку запроса, которая вызывает ошибку, а не оригинальную, которая работает. Ваша потребность звучит как простой агрегированный запрос . Найдите этот тип SQL-запроса или даже выполните поиск по ошибке. Всегда исследуйте, прежде чем спрашивать.

Parfait 07.08.2024 02:28

Включите группировку в конструкции запроса. Оставьте все в «Группировать по», кроме Quantity, где вы используете сумму. Сделанный.

Andre 07.08.2024 09:25

@Андре: Спасибо!! Это именно то, что мне было нужно.

gr8dane 07.08.2024 17:11
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
6
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы суммируете, используя SUM(tblIngredients.Quantity), чтобы получить сумму количества ингредиента, а затем добавляете все остальные столбцы в предложении SELECT в предложение GROUP BY:

SELECT tblRecipeIngredients.IngredientID, tblIngredients.Cooler, tblIngredients.Ingredient, tblIngredients.UnitOfMeasure, SUM(tblRecipeIngredients.Quantity) as Quantity, tblRecipes.Planned
FROM tblIngredients INNER JOIN (tblRecipes INNER JOIN tblRecipeIngredients ON tblRecipes.RecipeID = tblRecipeIngredients.RecipeID) ON tblIngredients.IngredientID = tblRecipeIngredients.IngredientID
WHERE (((tblRecipes.Planned)=True))
GROUP BY tblRecipeIngredients.IngredientID, tblIngredients.Cooler, tblIngredients.Ingredient, tblIngredients.UnitOfMeasure, tblRecipes.Planned
ORDER BY tblIngredients.Cooler, tblIngredients.Ingredient;

Спасибо!! Благодаря этому и комментарию Андре к моему сообщению, после нескольких дней поисков у меня наконец-то появилось решение. Мне никогда не приходило в голову группировать по всему.

gr8dane 07.08.2024 17:18

В этом вся хитрость запроса GROUP BY. Каждый столбец в вашем SELECT либо должен быть обернут в агрегатную функцию (sum(), max(), avg() и т. д.), ИЛИ он должен быть указан в вашем предложении GROUP BY. В противном случае это просто выдаст ошибку. Это справедливо для каждой СУБД (кроме Mysql до версии 5.7.2, которая допускала такую ​​ерунду).

JNevill 07.08.2024 17:41

Другие вопросы по теме