Выбирающий запрос, выбирая оператор select

Я даже не знаю, правильно ли я делаю этот запрос. Существует таблица Sandwiches, в которой есть 7 полей, а 2 из них являются списками (Type и Bread).

Итак, я сделал запрос, который объединяет все значения comboboxes в один запрос, например:

SELECT TypesAndBreads.TBName, TypesAndBreads.Type
FROM (SELECT [Sandwiches Types].[Sandwich Type] As TBName, "Sandwich Type" As Type
    FROM [Sandwiches Types]
UNION ALL
    SELECT Breads.Bread As TBName, "Bread" As Type 
    FROM Breads)  AS TypesAndBreads;

Я получаю плоские значения таблиц, теперь хочу подсчитать все бутерброды под каждым TypesAndBreads.TBName. У меня есть это, просто чтобы убедиться, что он работает со всеми бутербродами:

SELECT TypesAndBread.Type, TypesAndBread.TBName,
       (SELECT Count(Sandwiches.[SandwichID]) As SandwichCount
        FROM Sandwiches) As SandwichCount
FROM TypesAndBread;

Но я хочу ссылаться на текущий тип и TBName внутри подзапроса. Что-то вроде этого:

SELECT TypesAndBread.Type, TypesAndBread.TBName,
       (SELECT Count(Sandwiches.[SandwichID]) As SandwichCount
        FROM Sandwiches
        WHERE Sandwiches.[TypesAndBread.Type] = Sandwiches.[TypesAndBread.TBName]) As SandwichCount
FROM TypesAndBread;

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

Итак, я думаю, мой вопрос: Есть ли способ ссылаться на текущие выбранные поля в подзапросе? Или есть другой способ приблизиться к этому?

Спасибо за помощь

EDIT: Моя структура таблицы такова:

Sandwiches поля

| SandwichID | Name | Date Added | Chef | Sandwich Type | Bread | Reviewed By |

где Sandwich Type и Bread являются полями поиска для этих таблиц:

Sandwiches Types поля

| Sandwich Type |

Breads поля

| Bread |

В запросе TypesAndBreads объединены таблицы Sandwiches Types and Breads, но причина этого в том, что я могу получить счет всех бутербродов, имеющих этот тип или хлеб. Результат такой:

+=============================================+
|      Type     |    TBName   | SandwichCount |
+=============================================+
| Sandwich Type | Turkey Club |            10 |
| Bread         | Italian     |             5 |
| Bread         | Garlic      |             8 |
+---------------------------------------------+

В результате первой строки примера говорится, что в записи записано 10 бутербродов с полем типа "Сэндвич", равным турецкому клубу.

Я надеюсь, что это объяснит это лучше.

Ответы

Ответ 1

Не уверен, поддерживает ли Access его, но в большинстве движков (включая SQL Server) это называется коррелированным подзапросом и отлично работает:

SELECT  TypesAndBread.Type, TypesAndBread.TBName,
        (
        SELECT  Count(Sandwiches.[SandwichID]) As SandwichCount
        FROM    Sandwiches
        WHERE   (Type = 'Sandwich Type' AND Sandwiches.Type = TypesAndBread.TBName)
                OR (Type = 'Bread' AND Sandwiches.Bread = TypesAndBread.TBName)
        ) As SandwichCount
FROM    TypesAndBread

Это можно сделать более эффективным путем индексирования Type и Bread и распределения подзапросов по UNION:

SELECT  [Sandwiches Types].[Sandwich Type] As TBName, "Sandwich Type" As Type,
        (
        SELECT  COUNT(*) As SandwichCount
        FROM    Sandwiches
        WHERE   Sandwiches.Type = [Sandwiches Types].[Sandwich Type]
        )
FROM    [Sandwiches Types]
UNION ALL
SELECT  [Breads].[Bread] As TBName, "Bread" As Type,
        (
        SELECT  COUNT(*) As SandwichCount
        FROM    Sandwiches
        WHERE   Sandwiches.Bread = [Breads].[Bread]
        )
FROM    [Breads]

Ответ 2

Я слишком усложнял себя. После долгого перерыва и возврата назад желаемый результат может быть выполнен с помощью этого простого запроса:

SELECT Sandwiches.[Sandwich Type], Sandwich.Bread, Count(Sandwiches.[SandwichID]) AS [Total Sandwiches]
FROM Sandwiches
GROUP BY Sandwiches.[Sandwiches Type], Sandwiches.Bread;

Спасибо, что ответили, это помогло моему мышлению.