2013-07-29 28 views
1

У меня есть таблицы для проектов и членов, основная цель - отношения друг к другу.Группа в хранимой процедуре

У меня много проектов и много членов, теперь я должен найти, сколько членов, назначенных в конкретном проекте (у меня есть много таблиц в дополнение к этим, о которых я здесь не упоминал, но вы можете видеть в моей хранимой процедуре)

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 пункта

+2

Вы уверены, что это MySQL, а не SQL Server ?? –

+0

'GROUP BY E.Employee_ID, S.Project_Title' вместо' Group BY E.First_Name'. –

+0

[Именование хранимых процедур] (http://msdn.microsoft.com/en-us/library/ms190669 (v = sql.105) .aspx): «Мы не рекомендуем создавать хранимые процедуры с использованием ** sp_ ** в качестве префикса. SQL Server использует префикс ** sp_ ** для обозначения системных хранимых процедур. Выбранное имя может конфликтовать с какой-либо будущей системной процедурой ». –

ответ

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 [email protected]_ID 
Group BY E.Employee_ID,S.Project_Title 
2

При использовании group by пункт в вашем SQL запросе, то только те столбцы, можно положить в списке select, которые перечислены в списке столбцов group by.

В вашем выше запросе у вас есть только First_name в списке group by колонки, но вы пытаетесь получить E.Employee_ID,S.Project_Title в select колонке перечислены

, если вы хотите, чтобы все вышеперечисленные поля в вашей выберите колонку затем добавить их в группу по статье.

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 [email protected]_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 [email protected]_ID 
     Group BY E.Employee_ID,S.Project_Title 
+1

'Группа BY E.First_Name' с' COUNT (E.First_Name) 'будет работать нормально, но счет будет 1 из-за' First_Name' в 'GROUP BY', вы должны удалить его из' GROUP BY' , –

Смежные вопросы