如何为一个字段设置“0.5”值 - SSMS t-sql
How to set "0.5" value for one field - SSMS t-sql
我有以下代码:
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
结果如下:
它计算全职/兼职员工的独特数量
我的目标是将每个 "Full Time employee" 计为 1(其中 dol.WHID = 1),这是正确的。
但是每个 "Part Time employee" 我需要算作“0.5”(其中 dol.WHID = 2),这是不正确的,因为它仍然算作 "DOLStatus 2" - 1
有什么想法可以实现吗?
谢谢你,一如既往!
好吧,我会使用 case 语句将计数乘以 0.5:
CASE WHEN dol.WHID = 2 THEN 0.5 ELSE 1.0 END * COUNT(DISTINCT tm.PaycomEmployeeFK) AS [CountClients]
您可以将 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
我有以下代码:
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
结果如下:
它计算全职/兼职员工的独特数量
我的目标是将每个 "Full Time employee" 计为 1(其中 dol.WHID = 1),这是正确的。
但是每个 "Part Time employee" 我需要算作“0.5”(其中 dol.WHID = 2),这是不正确的,因为它仍然算作 "DOLStatus 2" - 1
有什么想法可以实现吗?
谢谢你,一如既往!
好吧,我会使用 case 语句将计数乘以 0.5:
CASE WHEN dol.WHID = 2 THEN 0.5 ELSE 1.0 END * COUNT(DISTINCT tm.PaycomEmployeeFK) AS [CountClients]
您可以将 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