我有项目和成员的表格,主要目标是一对多关系。
我有很多项目和很多成员,现在我必须找到在特定项目中分配了多少成员(除了这些之外我还有很多表,我在这里没有提到,但你可以在我的存储过程中看到)
CREATE PROCEDURE [dbo].[SP_PROJECT_EMPLOYSSSS]
(
@Employee_ID INT
)
AS
BEGIN
SELECT E.Employee_ID, S.Project_Title, COUNT(E.First_Name)
FROM tbl_NEW_Employee AS E
INNER JOIN tbl_NEW_Employee_Project AS K ON K.Employee_ID = E.Employee_ID
INNER JOIN dbo.tbl_NEW_Project AS S ON K.Project_ID = S.Project_ID
WHERE E.Is_Active=1 AND E.Employee_ID = @Employee_ID
Group BY E.First_Name
END
我是编程和存储过程的新手。
我收到此错误:
列'tbl_NEW_Employee.Employee_ID'在选择列表中无效 因为它不包含在聚合函数或 GROUP BY子句。
请帮我用GROUP BY
子句
答案 0 :(得分:2)
在sql查询中使用group by
子句时,只有那些列可以放在select
列列表中的group by
列列表中。
在上面的查询中,您只有group by
列列表中的First_name,但您正试图在E.Employee_ID,S.Project_Title
列列表中获取select
如果您想要选择列中的所有上述字段,请在group by子句中添加它们。
SELECT E.Employee_ID,S.Project_Title,COUNT(E.First_Name)
FROM tbl_NEW_Employee AS E
INNER JOIN tbl_NEW_Employee_Project AS K ON K.Employee_ID=E.Employee_ID
INNER JOIN dbo.tbl_NEW_Project AS S ON K.Project_ID=S.Project_ID
WHERE E.Is_Active=1 AND E.Employee_ID=@Employee_ID
Group BY E.Employee_ID,S.Project_Title
否则将其从选择列表中删除
SELECT COUNT(E.First_Name) ,E.First_Name
FROM tbl_NEW_Employee AS E
INNER JOIN tbl_NEW_Employee_Project AS K ON K.Employee_ID=E.Employee_ID
INNER JOIN dbo.tbl_NEW_Project AS S ON K.Project_ID=S.Project_ID
WHERE E.Is_Active=1 AND E.Employee_ID=@Employee_ID
Group BY E.Employee_ID,S.Project_Title
答案 1 :(得分:0)
似乎是SQL Server
而不是MySQL
。
您必须GROUP BY
要聚合的列(即每个值只输出一行):
SELECT E.Employee_ID,S.Project_Title,COUNT(E.First_Name)
FROM tbl_NEW_Employee AS E
INNER JOIN tbl_NEW_Employee_Project AS K ON K.Employee_ID=E.Employee_ID
INNER JOIN dbo.tbl_NEW_Project AS S ON K.Project_ID=S.Project_ID
WHERE E.Is_Active=1 AND E.Employee_ID=@Employee_ID
Group BY E.Employee_ID,S.Project_Title