2017-01-23 32 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

你能點擊'enter image description here' – Kosal

+2

一般的GROUP BY規則說:如果指定了GROUP BY子句,SELECT列表中的每個列引用必須標識一個分組列或者是一個set函數的參數! – jarlh

回答

1

首先,請使用table aliases。第二種:您需要將SELECT中的所有列添加到GROUP BY(但不包括SUM和COUNT函數中的所有列)。

第三:你有奇怪的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

在組試試這個下面的查詢或包括HR_EMPMAST.JOBCODE by子句...

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