加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:32:55 所属栏目:MsSql教程 来源:网络整理
导读:我甚至不知道我是否正确地做这个查询. 有一个三明治表有7个字段,其中2个是组合框(类型和面包). 所以我做了一个查询,将所有的组合框值合并成一个查询,如下所示: SELECT TypesAndBreads.TBName,TypesAndBreads.TypeFROM (SELECT [Sandwiches Types].[Sandwich
我甚至不知道我是否正确地做这个查询.
有一个三明治表有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]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读