Запрос Select, выбирающий избранный оператор

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

Таким образом, я сделал запрос, который комбинирует все значения полей комбинированного списка в один запрос, как это:

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, когда они открывают Report, из которого этот запрос будет основанным.

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

Спасибо за справку

Править: Моя структура таблицы похожа на это:

Sandwichesполя

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

где Sandwich Type и Bread поля Lookup для этих таблиц:

Sandwiches Typesполя

| Sandwich Type |

Breadsполя

| Bread |

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

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

первая строка результата примера basicly говорит, что существует 10 тестовых систем в записи с полем Sandwich Type, равным Клубу Турции.

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

16
задан Fionnuala 11 January 2010 в 21:50
поделиться

2 ответа

Не уверены, если доступ поддерживает его, но в большинстве двигателей (в том числе 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

Это может быть сделано больше Эффективно по индексации Тип и Хлеб и распространение подзапросов на союзе :

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]
22
ответ дан 30 November 2019 в 21:19
поделиться

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

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

Спасибо за ответ, это помогло моей череде размышлений.

5
ответ дан 30 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: