SQL - 按计数分组 - 使用两列

SQL - Group by count - using two columns

目前我正在尝试进行查询,该查询将 运行 登记在册的护士人数分组到他们的成本中心(基本上是他们的位置、哪个病房等)以及他们在哪个时间段陷入(早班、晚班等)

然而,有时来自另一个成本中心的人可能会被调到另一个成本中心,我也需要将其计入该组。

所有员工都有一个家庭成本中心:HOMELABORLEVLENAME3,然后存在一个名为 ORGPATHTXT 的列。

ORGPATHTXT 始终为 null,除非它们被传入。

我需要将两者组合在一起,然后根据轮班时间将其分段。

我当前的代码如下:

select 
HOMELABORLEVELNAME2, HOMELABORLEVELNAME3,

sum(CASE WHEN SHIFTSTARTDATE between '2022-05-13 04:00' and '2022-05-13 11:00' THEN 1 ELSE 0 END) as 'Today_Early',
sum(CASE WHEN SHIFTSTARTDATE between '2022-05-13 11:00' and '2022-05-13 18:00' THEN 1 ELSE 0 END) as 'Today_Late',
sum(CASE WHEN SHIFTSTARTDATE between '2022-05-13 18:00' and '2022-05-14 04:00' THEN 1 ELSE 0 END) as 'Today_Night',

sum(CASE WHEN SHIFTSTARTDATE between '2022-05-14 04:00' and '2022-05-14 11:00' THEN 1 ELSE 0 END) as 'Tmrw_Early',
sum(CASE WHEN SHIFTSTARTDATE between '2022-05-14 11:00' and '2022-05-14 18:00' THEN 1 ELSE 0 END) as 'Tmrw_Late',
sum(CASE WHEN SHIFTSTARTDATE between '2022-05-14 18:00' and '2022-05-15 04:00' THEN 1 ELSE 0 END) as 'Tmrw_Night'

from VP_SCHEDULE s

where

PERSONNUM != 'UNASSIGNEDSHIFT'
and
HOMELABORLEVELNAME2 = '40'
AND (HOMELABORLEVELNAME3 = '1914' OR HOMELABORLEVELNAME3 = '1964' OR HOMELABORLEVELNAME3 = '1924' OR HOMELABORLEVELNAME3 = '1954'
OR HOMELABORLEVELNAME3 = '1944' OR HOMELABORLEVELNAME3 = '1934' OR HOMELABORLEVELNAME3 = '1554' OR HOMELABORLEVELNAME3 = '1564'
OR HOMELABORLEVELNAME3 = '1504' OR HOMELABORLEVELNAME3 = '5334' OR HOMELABORLEVELNAME3 = '2204' OR HOMELABORLEVELNAME3 = '3104'
OR HOMELABORLEVELNAME3 = '3004' OR HOMELABORLEVELNAME3 = '2004' OR HOMELABORLEVELNAME3 = '3304' OR HOMELABORLEVELNAME3 = '2104'
OR HOMELABORLEVELNAME3 = '7554' OR HOMELABORLEVELNAME3 = '1754')
and paycodename is null
-- AND SHIFTSTARTDATE between '2022-04-29 04:00' and '2022-04-29 11:00'
group by HOMELABORLEVELNAME2, HOMELABORLEVELNAME3

然后显示为:

我的问题是,通过按 HOMELABORLEVELNAME3 分组,它不计算填写了 ORGPATHTTXT 的人数,但如果我按 ORGPATHTXT 分组,我就没有按要求的成本中心编号分组。对不起,如果这是冗长的!但如有任何帮助,我们将不胜感激。

设置 ORGPATHTTXT 时,您需要一些方法来了解应该计算哪个 HOMELAGORLEVELNAME3 值。

select [...]
from vp_schedule s
left join ([... some things that maps ORGPATHTXT to LEVELNAME3 value]) magic 
on s.ORGPATHTXT = magic.ORGPATHTXT
where PERSONNUM != 'UNASSIGNEDSHIFT'
  and s.HOMELABORLEVELNAME2 = '40'
  AND (s.HOMELABORLEVELNAME3 in ('1914','1964','1924','1954', '1944','1934','1554','1564', '1504','5334','2204','3104', '3004','2004','3304','2104', '7554','1754'))
  and paycodename is null
-- AND SHIFTSTARTDATE between '2022-04-29 04:00' and '2022-04-29 11:0
group by 
  HOMELABORLEVELNAME2, 
  COALESCE( magic.HOMELABORLEVELNAME3, s.HOMELABORLEVELNAME3)