总共三个表,统计表1和表2中连接到表3的记录数

  • 本文关键字:连接 记录 和表 统计表 三个 sql
  • 更新时间 :
  • 英文 :


我有三个表,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 )来提供不同的计数。

有一些很好的资源可以阅读更多关于这方面的内容——试试看:为什么多个表联接会产生重复的行?

最新更新