sql-server - 如何为一个字段设置“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
任何想法我将如何做到这一点?
谢谢你,一如既往!
解决方案
好吧,我只需使用 case 语句将计数乘以 0.5:
CASE WHEN dol.WHID = 2 THEN 0.5 ELSE 1.0 END * COUNT(DISTINCT tm.PaycomEmployeeFK) AS [CountClients]
推荐阅读
- google-places-api - 如果用户未在文本框中输入内容,您是否需要为 Google 地方信息自动完成会话付费?
- excel - Excel 匹配索引多个条件和多个日期
- dockerfile - 如何在 alpine 中使用最新版本的 Chromium 驱动程序
- c# - 如何从上下文菜单中获取所选项目
- python - 如何使用散景后端控制全息视图中的(活动)工具
- c# - 断言在 NUnit 中处理的异常
- vba - 如何自动排列循环自动绘制的形状?
- r - 在忽略 dplyr 链中的特定值集时取平均值
- excel - 如果单元格已填充,如何停止计算,同时保留最后计算的值
- angular - 如何对以 TemplateRef 作为输入的 Angular 组件进行单元测试?