t-SQL - определить количество дней, в течение которых сотрудник работал - в рамках существующего кода (для расчета суммы FTE сотрудника за период) - PullRequest
0 голосов
/ 14 ноября 2018

Моя цель состоит в том, чтобы рассчитать количество эквивалентных сотрудников, занятых полный рабочий день (FTE) - полный и неполный рабочий день - за рабочий период

У меня есть следующий код для расчета количества сотрудников FT / PT, сгруппированных по регионам и статусам (FT = 1 / PT = 2):

Код 1 (Основной):

DECLARE @MonthBOP date = '07-01-2017'
DECLARE @MonthEOP date = '09-30-2018'
DECLARE @GLRegionsWHID int = 705
DECLARE @GLProgramsWHID int = -1

SELECT 
   glrn.WHID AS [RegionID]
  ,dol.WHID  AS [StatusType]
  ,COUNT (*) AS [CountClients]

FROM [WH].[Dimension].[PaycomEmployee] empl
INNER JOIN Dimension.PaycomDOLStatus dol ON empl.PaycomDOLStatusFK = dol.WHID
INNER JOIN Dimension.PaycomDepartment dept ON empl.PaycomDepartmentFK = dept.WHID
INNER JOIN Dimension.GLProgram glpgm ON dept.GLProgramFK = glpgm.WHID
INNER JOIN Dimension.GLRegion glrn ON glpgm.GLRegionFK = glrn.WHID

WHERE 

((dol.WHID IN (1,2)))
AND ((glrn.WHID IN (@GLRegionsWHID)) OR (-1 IN (@GLRegionsWHID)))
AND ((glpgm.WHID IN (@GLProgramsWHID)) OR (-1 IN (@GLProgramsWHID)))

GROUP BY
    glrn.WHID
   ,dol.WHID

Результат следующий (ниже):

enter image description here

Но у меня также есть другая часть кода, которая определяет - рабочий период сотрудника:

Код 2:

Min(@MonthEOP, empl.DateTerminated) - Max(@MonthBOP, empl.DateHired) + 1 =
 [Number Days employed in Period]
WHERE empl.DateTerminated > @MonthBOP 

Мой вопрос - как правильно объединить основной код (код 1) и дополнительную часть (код 2) - чтобы все было в одном коде или - любой вид ссылки в Коде 1 на Код 2

Моя цель - определить рабочий период сотрудника и ввести его в Код 1 (Основной)

Спасибо за помощь!

1 Ответ

0 голосов
/ 14 ноября 2018

Вы не можете использовать MIN() или MAX(), как вы делаете в code2.

Вместо этого используйте CASE.

CASE
    WHEN @MonthBOP > empl.DateTerminated THEN @MonthBOP
    WHEN @MonthEOP < empl.DateTerminated THEN @MonthEOP
    ELSE empl.DateTerminated
END
-
CASE
    WHEN @MonthEOP < empl.DateHired THEN @MonthEOP
    WHEN @MonthBOP > empl.DateHired THEN @MonthBOP
    ELSE empl.DateHired
END
    AS [Number Days employed in Period]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...