2017-02-23 36 views
0

大家好我會問你一個關於功能使用情況的問題有不同的計數在SQL Server使用SQL Server具有鮮明的條件

COUNT(DISTINCT CASE E.SEX WHEN 'M' THEN 1 ELSE NULL END) AS M

但總是導致1和0這不算數高達

下面

是查詢

SELECT E.DEPT,D.DESCRIPTION AS DEPARTMENT,JF.CODE,JF.DESCRIPTION AS POSITION, 
COUNT(DISTINCT E.EMPCODE) AS ACTUAL, 
COUNT(DISTINCT CASE E.SEX WHEN 'M' THEN 1 ELSE NULL END) AS M, 
COUNT(DISTINCT CASE E.SEX WHEN 'F' THEN 1 ELSE NULL END) AS F, 
SUM(CASE WHEN AT.LEAVEDESC = 'ABS' THEN 1 ELSE 0 END) AS AWP, 
SUM(CASE WHEN AT.LEAVEDESC = 'UPL' THEN 1 ELSE 0 END) AS UPL, 
SUM(CASE WHEN AT.LEAVEDESC='DO' THEN 1 ELSE 0 END) AS DO, 
SUM(CASE WHEN AT.LEAVEDESC='AL' THEN 1 ELSE 0 END) AS AL, 
SUM(CASE WHEN AT.LEAVEDESC='PH' THEN 1 ELSE 0 END) AS PH, 
SUM(CASE WHEN AT.LEAVEDESC='MTL' THEN 1 ELSE 0 END) AS MTL, 
SUM(CASE WHEN START1 <> '1900-01-01' AND END1 = '1900-01-01' THEN 1 ELSE 0 END) AS FCI, 
SUM(CASE WHEN START1 = '1900-01-01' AND END1 <> '1900-01-01' THEN 1 ELSE 0 END) AS FCO 
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 AT_EMPSCHEDULE AT ON E.EMPCODE = AT.EMPCODE 
WHERE (TERMINATESTATUS = '' OR (DATETERMINATE > N'2/23/2017 8:05:40 AM' AND STARTDATE <= N'2/23/2017 8:05:40 AM')) 
AND AT.TRANDATE BETWEEN '2017-02-01 00:00:00.000' AND '2017-02-28 00:00:00.000' 
GROUP BY E.DEPT,D.DESCRIPTION,JF.CODE,JF.DESCRIPTION 

![運行腳本後,顯示結果] [10]

+1

你正試圖實現計數(獨特)查詢嗎? E.SEX字段只有兩種可能性,這就是爲什麼它返回1或0 –

+0

因爲當我加入AT_EMPSCHEDULE時,它爲每個員工記錄了28條記錄(基於本月的月份2月= 28),但是我想要計數僱員。 – Kosal

+0

@Kosal那麼你應該計算'DISTINCT e.empcode'而不是1或0 – NickyvV

回答

0

要得到適當數量的男性或女性,您必須用EmpCode替換1,因爲您使用的是獨特的。希望能幫助到你。

COUNT(DISTINCT CASE E.SEX WHEN 'M' THEN E.EMPCODE ELSE NULL END) AS M 
COUNT(DISTINCT CASE E.SEX WHEN 'F' THEN E.EMPCODE ELSE NULL END) AS F