首页 > 解决方案 > 如何为一个字段设置“0.5”值 - 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 

结果如下:

在此处输入图像描述

它计算员工的唯一数量,全职/兼职工作

我的目标是将每个“全职员工”计为 1(其中 dol.WHID = 1),这是正确的。

但是我需要将每个“兼职员工”计为“0.5”(其中 dol.WHID = 2),这是不正确的,因为它仍然计入“DOLStatus 2” - 计为 1

任何想法我将如何做到这一点?

谢谢你,一如既往!

标签: sql-servertsqlssmsiif

解决方案


好吧,我只需使用 case 语句将计数乘以 0.5:

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

推荐阅读