我有三个表,Tb_Requests、Tb_Offers和Tb_Product。
TB_缓冲器:产品_ID
Tb_请求:产品_ID
Tb_产品:产品_ID名称
我需要在一个查询中列出Tb_Product中的Name,以及Tb_Requests和Tb_Offers中与Tb_products匹配的计数。
这就是我目前所拥有的:
select p.[Name],count(o.Supp_ID)'#of Offer',count(r.Con_ID)'#of Requests'从Tb_Request r,Tb_Offers o,Tb_Product p
其中r.Prod_ID=o.Prod_ID和o.Prod_ID=p.Prod_ID
按p分组[名称]
结果:
名称|#报价|#请求
- 飞机|6|6
- 自动|25|25
- 计算机|72|72
- 牛奶|16|16
- 油|20|20
- 橙色|36|36
- 卡车|6|6
- 电视|20|20
但我的结果应该是:
NAME |报价数量| 请求数量
- 飞机|6|1
- 自动|5|5
- 计算机|12|6
- 牛奶|4|4
- 机油|4|5
- 橙色|6|6
- 卡车|6|1
- 电视|4|5
(8行受影响)
我需要将这两个查询结合起来:
选择p.[Name],count(o.Supp_ID)'#ofOffer'
来自TB_Offers o,TB_Product p
其中p.Prod_ID=o.Prod_ID
按p.[Name]
分组
选择p。[Name],count(r.Con_ID)"请求数">
来自Tb_Requests r,Tb_Productp
其中p.Prod_ID=r.Prod_ID
按p分组。[Name]
如有任何帮助,我们将不胜感激。
您看到的数字是因为每个表中的行数-对于"油";Offers中有4行,and Request中有5行,总共有20行。
这里有几个选项。您可以重新编写查询,以便对每个Offer和Request表使用outer apply,为每个表提供一个不同的聚合数字。您不指定RDMS,但也可以尝试count(distinct )
来提供不同的计数。
有一些很好的资源可以阅读更多关于这方面的内容——试试看:为什么多个表联接会产生重复的行?