Sql 计算项目成员人数

Sql 计算项目成员人数,sql,Sql,我有以下SQL语句,用于检索项目名称、项目经理和项目状态: 目前,当我将团队成员分配给项目时,他们将从成员表写入ProjectMetactionMember表。我想做的是计算该特定项目的团队成员数量。我需要在这个SQL语句中包含它,因为我要在datagridview中显示所有内容。谢谢你的帮助 表结构: Project {ProjectID, CompanyID, ProjectName, StartDate, EndDate, Description} Iterations {ProjectI

我有以下SQL语句,用于检索项目名称、项目经理和项目状态:

目前,当我将团队成员分配给项目时,他们将从成员表写入ProjectMetactionMember表。我想做的是计算该特定项目的团队成员数量。我需要在这个SQL语句中包含它,因为我要在datagridview中显示所有内容。谢谢你的帮助

表结构:

Project {ProjectID, CompanyID, ProjectName, StartDate, EndDate, Description}
Iterations {ProjectIterationID, ProjectID, StartDate, EndDate}
Member {MemberID, FirstName, LastName, CompanyRole}
ProjectIterationMember {ProjectIterationMemberID, ProjectIterationID, MemberID}

SELECT DISTINCT(Project.ProjectName), 
   Project.ProjectID, Project.Status,
   Project.CompanyID, Project.StartDate,
   m.MemberID, m.FirstName + ' ' + m.LastName AS  
   ProjectManager 
FROM 
   Project, Member m, ProjectIterationMember, Iterations i 
WHERE 
   m.CompanyRole = 'Project Manager' AND Project.CompanyID = '" + co_id + "' AND  
   m.MemberID = ProjectIterationMember.MemberID AND i.ProjectIterationID = 
   ProjectIterationMember.ProjectIterationID AND i.ProjectID = Project.ProjectID ORDER BY 
   Project.StartDate DESC
试试这个:

SELECT YOUR_SELECT_HERE, count(m.MemberID) as MemberCount
FROM YOUR_FROM_HERE
WHERE YOUR_WHERE_HERE
GROUP BY m.MemberID

基本上有两种方法可以做到这一点

第一:将分组添加到该语句中。这可能有效,也可能无效,具体取决于您的数据。在我看来,您目前加入ProjectMetationMember是为了联系项目经理。要使用分组,您可以为所有其他成员再次加入分组。此外,对于分组,您不需要使用distinct

SELECT Project.ProjectName, 
   Project.ProjectID, Project.Status,
   Project.CompanyID, Project.StartDate,
   m.MemberID, m.FirstName + ' ' + m.LastName AS  
   ProjectManager,
   Count(allMembers.MemberID) AS MemberCount
FROM 
   Project, Member m, ProjectIterationMember, Iterations i, ProjectIterationMember allMembers
WHERE 
   m.CompanyRole = 'Project Manager' AND Project.CompanyID = '" + co_id + "' AND  
   m.MemberID = ProjectIterationMember.MemberID AND i.ProjectIterationID = 
   ProjectIterationMember.ProjectIterationID AND i.ProjectID = Project.ProjectID AND i.ProjectIterationID = 
   allMembers.ProjectIterationID
   GROUP BY Project.ProjectName, 
   Project.ProjectID, Project.Status,
   Project.CompanyID, Project.StartDate,
   m.MemberID, m.FirstName, m.LastName
   ORDER BY 
   Project.StartDate DESC
第二种方法是内部选择。首先,如果您的数据结构不支持此select中的分组,则需要这样做。您还可以将内部选择导出到用户定义的函数,并在其他地方重用它

SELECT DISTINCT(Project.ProjectName), 
   Project.ProjectID, Project.Status,
   Project.CompanyID, Project.StartDate,
   m.MemberID, m.FirstName + ' ' + m.LastName AS  
   ProjectManager,
   (SELECT COUNT(MemberID) FROM ProjectIterationMember WHERE ProjectIterationID = i.ProjectIterationID) AS MemberCount
FROM 
   Project, Member m, ProjectIterationMember, Iterations i 
WHERE 
   m.CompanyRole = 'Project Manager' AND Project.CompanyID = '" + co_id + "' AND  
   m.MemberID = ProjectIterationMember.MemberID AND i.ProjectIterationID = 
   ProjectIterationMember.ProjectIterationID AND i.ProjectID = Project.ProjectID ORDER BY 
   Project.StartDate DESC

如果一个项目包含两个CompanyRole=‘项目经理’的成员,那么一个项目有多少个项目经理?你认为这个项目有多少成员?此外,是否所有项目都有项目经理?所有项目都有成员吗?如果您添加输入数据和预期输出,这会有所帮助。每个项目可以有一个项目经理和许多团队成员。所有项目都有项目经理,所有项目都需要成员。谢谢嗨,Florian,快速提问-我只想显示团队成员的最大不同数量。例如,如果我添加项目详细信息,我可以分配5个成员,但我可以添加另一个迭代,并在其中分配相同的5个人。现在,我的表显示了项目名称和团队成员数-5,同样的项目有10名成员。我怎样才能解决这个问题?谢谢这将是一个分组不再有效的例子。为此,您需要采用第二种方法并扩展内部选择,如下所示:从ProjectTerrationMember中选择TOP 1 COUNT(MemberID),其中ProjectTerationId=i.ProjectTerationId按ProjectTerationId分组按COUNT排序(MemberID)描述