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]
你正試圖實現計數(獨特)查詢嗎? E.SEX字段只有兩種可能性,這就是爲什麼它返回1或0 –
因爲當我加入AT_EMPSCHEDULE時,它爲每個員工記錄了28條記錄(基於本月的月份2月= 28),但是我想要計數僱員。 – Kosal
@Kosal那麼你應該計算'DISTINCT e.empcode'而不是1或0 – NickyvV