2016-04-28 18 views
0

1-Emplyee.EMP_CODE、STORE_CODEテーブルと2-STORE.store_codeを含む2つのテーブルのストアコードによって、特定のストアとグループにある従業員の数をカウントしようとしています... STORE tbl - EMP_CODEが含まれていないので)正しいトラックにいなくてもいいです。sql join and count error

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リストの各列参照は、グループ化列を特定するか、または集合関数の引数でなければなりません。 – 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)に、にのみ使用する210を使用して、必要な列をすべて選択することができます。次のようなものがあります。

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句のすべての列がありません。それはそれを修正する必要があります!