2016-04-28 51 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子句中的所有列。這應該解決它!