1

我有这个查询:

SELECT p.ProjectName,
       p.Oid AS Oid,
       p.[Views] as [Views],
       COUNT(pb.BidId) AS Bids
FROM Project p
LEFT OUTER JOIN ProjectContractorBid pb ON p.Oid = pb.ProjectID
WHERE p.Oid='A8704DA9-999B-4B13-806B-E8490C480F57'
GROUP BY p.ProjectName,
         p.Oid,
         p.[Views]

这将返回几乎正确的结果:

截图 1

如您所见,投标列的数字为 3,这 3 个投标仅针对其中一个项目,但并非针对所有项目,其他项目根本没有任何投标。我想知道我应该在查询中修改什么以仅针对 p.Oid 中引用的项目显示 3,而不是针对查询中返回的每条记录。

这是项目承包商投标表:

截图 2

如您所见,只有天使测试出价的值应为 3 而不是所有其他结果。请让我知道我应该修改什么。谢谢,拉齐尔

更新:项目表:

在此处输入图像描述

4

2 回答 2

1

我认为您需要同时加入ProjectNameProjectId,否则该Bids值将与项目中的所有记录相关联,而不仅仅是具有相同的记录ProjectName

SELECT p.ProjectName, p.Oid as Oid, p.[Views] as [Views], pb.Bids
FROM Project p    
LEFT OUTER JOIN 
(
  select count(*) Bids, ProjectID, ProjectName
  from ProjectContractorBid
  group by ProjectID, ProjectName
) pb 
  ON p.Oid = pb.ProjectID  
  AND p.ProjectName = pb.ProjectName
WHERE p.Oid='A8704DA9-999B-4B13-806B-E8490C480F57'

我还切换到使用子查询来获取出价计数。

于 2013-01-03T22:39:30.267 回答
0

在 on 条件中包含 ProjectName。

于 2013-01-03T22:43:45.347 回答