2016-04-28 6 views
0

Я пытаюсь подсчитать, сколько сотрудников есть в определенных магазинах и группы по коду хранения из двух таблиц, содержащих: 1-Emplyee.EMP_CODE, STORE_CODE Таблица и 2-STORE.store_code ... (STORE tbl-не содержит EMP_CODE). Так что я даже не могу быть на правильном пути.Ошибка соединения и подсчета sql

SELECT c.EMP_CODE,c.STORE_CODE,s.STORE_CODE,COUNT(c.EMP_CODE) 
FROM EMPLOYEE c 
LEFT OUTER JOIN STORE s 
    on c.STORE_CODE=s.STORE_CODE 
GROUP BY s.STORE_CODE 
; 

Keep Получение ошибки:

Msg 8120, Level 16, State 1, Line 1 Column 'EMPLOYEE.EMP_CODE' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

+1

Общее правило GROUP BY: Если указано предложение GROUP BY, каждая ссылка на столбец в списке SELECT должна либо идентифицировать столбец группировки, либо быть аргументом функции набора. – jarlh

ответ

0

Как говорится об ошибках, вы должны иметь все, не агрегатные столбцы в GROUP BY, от тех, которые вы выбираете.

Вариант 1: Добавить все неагрегированных столбцы в GROUP BY

SELECT c.EMP_CODE,c.STORE_CODE,s.STORE_CODE,COUNT(c.EMP_CODE) 
FROM EMPLOYEE c 
LEFT OUTER JOIN STORE s 
    on c.STORE_CODE=s.STORE_CODE 
GROUP BY c.EMP_CODE,c.STORE_CODE,s.STORE_CODE; 

Вариант 2: Удалить все не группируются столбцы из исходного SELECT

SELECT s.STORE_CODE, COUNT(c.EMP_CODE) 
FROM EMPLOYEE c 
LEFT OUTER JOIN STORE s 
    on c.STORE_CODE=s.STORE_CODE 
GROUP BY s.STORE_CODE; 

Вариант 3: Используйте вложенный выбор для COUNT(c.EMP_CODE) и только GROUP BY s.STORE_CODE, все еще имея возможность выбирать все нужные столбцы. Что-то вроде:

SELECT c.EMP_CODE,c.STORE_CODE,s.STORE_CODE,A.Count_Emp 
FROM EMPLOYEE c 
LEFT OUTER JOIN STORE s 
    on c.STORE_CODE=s.STORE_CODE 
LEFT OUTER JOIN (
     SELECT s.STORE_CODE, COUNT(c.EMP_CODE) as 'Count_Emp' 
     FROM EMPLOYEE c 
     LEFT OUTER JOIN STORE s 
     ON c.STORE_CODE=s.STORE_CODE 
     GROUP BY s.STORE_CODE 
       ) A on A.STORE_CODE = c.STORE_CODE; 
+0

Вариант 3: коррелированный подвыбор для подсчета. – jarlh

+0

Примечание: это не всеохватывающий список опций. –

0

Вам не хватает всех столбцов из вашего предложения GROUP BY. Это должно исправить!