微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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]

原文地址:https://www.jb51.cc/mssql/82159.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐