选择select语句的select查询

Ton*_* L. 16 sql ms-access select ms-access-2007

我甚至不知道我是否以正确的方式进行此查询.有一个Sandwiches表有7个字段,其中2个是组合框(TypeBread).

所以我做了一个查询,将所有组合框值组合成一个查询,如下所示:

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;
Run Code Online (Sandbox Code Playgroud)

我现在得到了桌子的平坦值,我想要计算每个下面的所有三明治TypesAndBreads.TBName.我有这个,只是为了确保它适用于所有的三明治:

SELECT TypesAndBread.Type, TypesAndBread.TBName,
       (SELECT Count(Sandwiches.[SandwichID]) As SandwichCount
        FROM Sandwiches) As SandwichCount
FROM TypesAndBread;
Run Code Online (Sandbox Code Playgroud)

但我想在子查询中引用当前的Type和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;
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用.我不认为会这样,只是想试一试.我想可能在打开报告时使用VBA构建查询,该查询将基于此查询.

所以我想我的问题是:有没有办法在子查询中引用当前选定的字段?或者有不同的方法来解决这个问题吗?

谢谢您的帮助

编辑: 我的表结构是这样的:

Sandwiches的领域

| SandwichID | Name | Date Added | Chef | Sandwich Type | Bread | Reviewed By |
Run Code Online (Sandbox Code Playgroud)

where Sandwich TypeBread是这些表的Lookup字段:

Sandwiches Types的领域

| Sandwich Type |
Run Code Online (Sandbox Code Playgroud)

Breads的领域

| Bread |
Run Code Online (Sandbox Code Playgroud)

TypesAndBreads查询结合了三明治类型和面包表,但原因是我可以获得所有具有该类型或面包的三明治的数量.结果如下:

+=============================================+
|      Type     |    TBName   | SandwichCount |
+=============================================+
| Sandwich Type | Turkey Club |            10 |
| Bread         | Italian     |             5 |
| Bread         | Garlic      |             8 |
+---------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

示例结果的第一行基本上说有三个三明治记录,三明治类型字段等于土耳其俱乐部.

我希望能更好地解释它.

Qua*_*noi 22

不确定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
Run Code Online (Sandbox Code Playgroud)

这可以通过索引更有效率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]
Run Code Online (Sandbox Code Playgroud)


Ton*_* L. 5

我过度复杂了.经过长时间休息并返回后,可通过以下简单查询完成所需的输出:

SELECT Sandwiches.[Sandwich Type], Sandwich.Bread, Count(Sandwiches.[SandwichID]) AS [Total Sandwiches]
FROM Sandwiches
GROUP BY Sandwiches.[Sandwiches Type], Sandwiches.Bread;
Run Code Online (Sandbox Code Playgroud)

谢谢你的回答,这有助于我的思路.