其他表中的SQL查询计数元素

时间:2013-07-25 09:19:22

标签: sql sql-server relational-database

我有两个SQL表,项目和里程碑:

项目PK - > ProID

里程碑结合PK - > ProID和MstNo

由于某种原因,我无法使用ProID作为外键将这两个表链接在一起(FOREIGN KEY约束)。但是,我需要编写一个查询,它将显示所有Projects表记录的详细信息,以及每个项目的许多里程碑。我可以使用内部联接以某种方式实现吗?我不擅长编写SQL查询。

4 个答案:

答案 0 :(得分:2)

试试这个 -

SELECT 
       P.*
     , cnt = ISNULL(M.cnt, 0)
FROM dbo.Projects P
LEFT JOIN (
     SELECT ProID, cnt = COUNT(1) 
     FROM dbo.Milestones
     GROUP BY ProID
) M ON M.ProID = P.ProID

答案 1 :(得分:0)

是的,你可以。 inner join匹配声明条件下一个表与另一个表的数据。

select * from Projects inner join Milestones on Projects.ProId = Milestones.ProID

此查询将读取Projects表中的所有数据,并与来自Milestones的数据进行匹配。

在结果中,您将拥有两个表中都有ProId的实体。

答案 2 :(得分:0)

SELECT P.ProID ,
       COUNT(M.*)
FROM   Projects P
       LEFT JOIN Milestones M
           ON M.ProID = P.ProID
GROUP BY P.ProID 

答案 3 :(得分:0)

如果我得到了表结构,你应该写一些类似

的内容
SELECT
  ProID,
  count(*) as MstNo
FROM projects
LEFT JOIN milestones ON projects.ProID=milestones.ProID
GROUP BY ProID

更好

SELECT
  ProID,
  sum(
    CASE WHEN milestones.ProID is null THEN 0 ELSE 1 END
  ) as MstNo
FROM projects
LEFT JOIN milestones ON projects.ProID=milestones.ProID
GROUP BY ProID

通过这种方式,对于没有里程碑的项目,您将获得0的计数