sql – 选择一个select语句的select查询

我甚至不知道我是否正确地做这个查询.
一个三明治表有7个字段,其中2个是组合框(类型和面包).

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

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,(SELECT Count(Sandwiches.[SandwichID]) As SandwichCount
        FROM Sandwiches
        WHERE Sandwiches.[TypesAndBread.Type] = Sandwiches.[TypesAndBread.TBName]) As SandwichCount
FROM TypesAndBread;

但这当然不行.我不认为会这样,只是想尝试一下.我在考虑在VBA打开报告时可能会使用VBA构建查询.

所以我猜我的问题是:有没有办法引用子查询中当前选定的字段?还是有不同的方式来处理这个问题?

谢谢您的帮助

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

三明治的领域

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

其中三明治类型和面包是这些表的查找字段:

三明治类型的领域

| Sandwich Type |

面包的领域

| Bread |

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

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

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

我希望能够更好地解释.

解决方法

不知道Access是否支持它,但是在大多数引擎(包括sql Server)中,这被称为相关子查询并且可以正常工作:
SELECT  TypesAndBread.Type,(
        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

通过索引“类型”和“面包”并将子查询分布在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]

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...