Как установить значение «0,5» для одного поля - SSMS t-sql - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть следующий код:

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

SELECT 
    glrn.[WHID] as [RegionWHID],
    glrn.Region,
    dol.WHID [DOL Status],
    dol.DOLStatusCode,
    COUNT(DISTINCT tm.PaycomEmployeeFK) AS [CountClients]
FROM 
    [WH].[Fact].[PaycomTimeSheet] tm
INNER JOIN 
    [Dimension].PaycomEmployee empl ON tm.PaycomEmployeeFK = empl.WHID
INNER JOIN 
    [Dimension].PaycomDOLStatus dol ON empl.PaycomDOLStatusFK = dol.WHID
INNER JOIN 
    [Dimension].GLProgram glpgm ON tm.GLProgramFK = glpgm.WHID
INNER JOIN 
    [Dimension].GLRegion glrn ON glpgm.GLRegionFK = glrn.WHID
WHERE 
    (tm.WorkDate >= @MonthBOP) AND (tm.WorkDate <= @MonthEOP)
    AND ((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], glrn.Region, dol.DOLStatusCode, dol.WHID
ORDER BY
    glrn.Region 

Результат следующий:

enter image description here

Рассчитывает уникальное количество сотрудников, проработавших полный / неполный рабочий день

Моя цель состоит в том, чтобы считать каждого «работника на полной ставке» равным 1 (где dol.WHID = 1), что является правильным.

Но каждого «сотрудника, работающего неполный рабочий день» мне нужно считать как «0.5» (где dol.WHID = 2), что неверно, так как оно по-прежнему считается «DOLStatus 2» - как 1

Есть идеи, как мне это сделать?

Спасибо, как всегда!

Ответы [ 2 ]

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

вы можете использовать SUM с CASE

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

SELECT 
    glrn.[WHID] as [RegionWHID],
    glrn.Region,
    dol.WHID [DOL Status],
    dol.DOLStatusCode,
    SUM(CASE WHEN dol.WHID = 1 THEN 1.00 WHEN dol.WHID = 2 THEN 0.5 END ) AS [CountClients]
FROM 
    [WH].[Fact].[PaycomTimeSheet] tm
INNER JOIN 
    [Dimension].PaycomEmployee empl ON tm.PaycomEmployeeFK = empl.WHID
INNER JOIN 
    [Dimension].PaycomDOLStatus dol ON empl.PaycomDOLStatusFK = dol.WHID
INNER JOIN 
    [Dimension].GLProgram glpgm ON tm.GLProgramFK = glpgm.WHID
INNER JOIN 
    [Dimension].GLRegion glrn ON glpgm.GLRegionFK = glrn.WHID
WHERE 
    (tm.WorkDate >= @MonthBOP) AND (tm.WorkDate <= @MonthEOP)
    AND ((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], glrn.Region, dol.DOLStatusCode, dol.WHID
ORDER BY
    glrn.Region 
0 голосов
/ 09 ноября 2018

Ну, я бы просто умножил счет на 0,5, используя инструкцию case:

CASE WHEN dol.WHID = 2 THEN 0.5 ELSE 1.0 END * COUNT(DISTINCT tm.PaycomEmployeeFK) AS [CountClients]
...