0
Привет всем Я хотел бы задать вам вопрос об использовании условия в функции подсчитывать с отчетливым в SQL сервереИспользуя условие с отчетливым в SQL сервере
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]
Что вы пытаетесь достичь Count (Distinct) Query? Для поля E.SEX существует только две возможности. Вот почему он возвращает 1 или 0 –
Потому что, когда я присоединяюсь к AT_EMPSCHEDULE, у него есть 28 записей для каждого сотрудника (база в день в месяце в этом месяце Feb = 28), но я бы хотел сосчитать наемный рабочий. – Kosal
@ Kosal, тогда вы должны считать 'DISTINCT e.empcode' вместо 1 или 0 – NickyvV