2017-01-23 1 views
1

こんにちは皆、私はサブクエリーをコードとして使用したいと思いますが、エラーが発生します。どうすればいいのですか?ありがとう!サブグループをSQL Serverでグループ内で使用する

SELECT HR_EMPMAST.DEPT,HR_DEPARTMENT.DESCRIPTION AS DEPARTMENT,HR_JOBFUNCTION.CODE,HR_JOBFUNCTION.DESCRIPTION AS POSITION, 
COUNT(HR_EMPMAST.EMPCODE) ACTUAL, 
SUM(CASE WHEN HR_EMPMAST.SEX = 'M' THEN 1 ELSE 0 END) AS M, 
SUM(CASE WHEN HR_EMPMAST.SEX = 'F' THEN 1 ELSE 0 END) AS F,SUM(CASE WHEN HR_EMPMAST.EMPTYPE='LOCAL' THEN 1 ELSE 0 END) AS LOCALEMP, 
SUM(CASE WHEN HR_EMPMAST.EMPTYPE='EXPAT' THEN 1 ELSE 0 END) AS EXPATEMP--, 
(SELECT EMPNO FROM HR_HEADCOUNT WHERE POSITION=HR_EMPMAST.JOBCODE AND INMONTH=1 AND INYEAR=2017) AS EMPNO 
FROM HR_EMPMAST 
LEFT JOIN HR_DEPARTMENT 
ON HR_EMPMAST.DEPT = HR_DEPARTMENT.CODE 
LEFT JOIN HR_JOBFUNCTION 
ON HR_EMPMAST.JOBCODE=HR_JOBFUNCTION.CODE 
WHERE HR_EMPMAST.CAREERDESC <> 'TERMIMATE' 
GROUP BY HR_EMPMAST.DEPT,HR_DEPARTMENT.DESCRIPTION,HR_JOBFUNCTION.CODE,HR_JOBFUNCTION.DESCRIPTION 

enter image description here

+0

1私たちにエラーメッセージを表示:

は、このいずれかを使用するようにしてください。 2)コードをフォーマットしてみてください。 – jarlh

+0

「ここに画像の説明を入力してください」 – Kosal

+2

一般的なGROUP BYルールは次のように述べています:GROUP BY句が指定されている場合、SELECTリストの各列参照はグループ化列を特定するか、 – jarlh

答えて

1

...クエリの下にこれを試してみてくださいまたはGROUP BY句にHR_EMPMAST.JOBCODEを含め、table aliasesを使用してください。

2番目:SELECTからGROUP BYまでのすべての列を追加する必要があります(SUMおよびCOUNT関数の列は追加しないでください)。

第3位:あなたは奇妙なEMPNOを選択しました。おそらく、より良い方法はJOINを使用することです?テキストとして - )

SELECT e.DEPT, 
     d.DESCRIPTION AS DEPARTMENT, 
     jf.CODE, 
     jf.DESCRIPTION AS POSITION, 
     COUNT(e.EMPCODE) ACTUAL, 
     SUM(CASE WHEN e.SEX = 'M' THEN 1 ELSE 0 END) AS M, 
     SUM(CASE WHEN e.SEX = 'F' THEN 1 ELSE 0 END) AS F, 
     SUM(CASE WHEN e.EMPTYPE='LOCAL' THEN 1 ELSE 0 END) AS LOCALEMP, 
     SUM(CASE WHEN e.EMPTYPE='EXPAT' THEN 1 ELSE 0 END) AS EXPATEMP, 
     hc.EMPNO 
FROM HR_EMPMAST e 
LEFT JOIN HR_DEPARTMENT d 
    ON e.DEPT = d.CODE 
LEFT JOIN HR_JOBFUNCTION jf 
    ON e.JOBCODE = jf.CODE 
LEFT JOIN HR_HEADCOUNT hc 
    ON hc.POSITION = e.JOBCODE AND hc.INMONTH=1 AND hc.INYEAR=2017 
WHERE e.CAREERDESC <> 'TERMIMATE' 
GROUP BY e.DEPT, 
     d.DESCRIPTION, 
     jf.CODE, 
     jf.DESCRIPTION, 
     hc.EMPNO 
+1

私はあなたが今働いていると答えてくれてありがとうと言いたいと思います。 – Kosal

1

まず

SELECT HR_EMPMAST.DEPT,HR_DEPARTMENT.DESCRIPTION AS DEPARTMENT,HR_JOBFUNCTION.CODE,HR_JOBFUNCTION.DESCRIPTION AS POSITION, 
COUNT(HR_EMPMAST.EMPCODE) ACTUAL, 
SUM(CASE WHEN HR_EMPMAST.SEX = 'M' THEN 1 ELSE 0 END) AS M, 
SUM(CASE WHEN HR_EMPMAST.SEX = 'F' THEN 1 ELSE 0 END) AS F,SUM(CASE WHEN HR_EMPMAST.EMPTYPE='LOCAL' THEN 1 ELSE 0 END) AS LOCALEMP, 
SUM(CASE WHEN HR_EMPMAST.EMPTYPE='EXPAT' THEN 1 ELSE 0 END) AS EXPATEMP, 

em.EMPNO AS EMPNO 

FROM HR_EMPMAST 

LEFT JOIN (SELECT POSITION, EMPNO FROM HR_HEADCOUNT WHERE INMONTH=1 AND INYEAR=2017) em on em.POSITION=HR_EMPMAST.JOBCODE 

LEFT JOIN HR_DEPARTMENT 
ON HR_EMPMAST.DEPT = HR_DEPARTMENT.CODE 
LEFT JOIN HR_JOBFUNCTION 
ON HR_EMPMAST.JOBCODE=HR_JOBFUNCTION.CODE 
WHERE HR_EMPMAST.CAREERDESC <> 'TERMIMATE' 
GROUP BY HR_EMPMAST.DEPT,HR_DEPARTMENT.DESCRIPTION,HR_JOBFUNCTION.CODE,HR_JOBFUNCTION.DESCRIPTION 
+0

私はあなたの答えに感謝したいと思います。 – Kosal

関連する問題