2016-04-28 62 views
0

我想指望有多少员工在某些商店和集团的商店代码从2表包含,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 
; 

不断收到一个错误:

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列表中的每个列引用都必须标识分组列或者是set函数的参数。 – 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子句中的所有列。这应该解决它!