【发布时间】:2020-01-17 02:17:02
【问题描述】:
我目前有以下查询,结果位于底部。
select
b.EMPLOYEE,
FIRST_NAME,
LAST_NAME,
PL_1,
PL_2,
PL_3,
PL_4,
PL_5,
PL_6,
DUAL_EMPLOYEE,
Dual_Process_Level_Comparison,
case when b.Primary_Compare_Number <> b.Supplemental_Compare_Number then 'REVIEW' else 'MATCH' end as process_level_compare
FROM
(
select
a.EMPLOYEE,
m.FIRST_NAME,
m.LAST_NAME,
m.PROCESS_LEVEL as PL_1,
max(case when a.POS_LEVEL = 2 then a.PROCESS_LEVEL end) as PL_2,
max(case when a.POS_LEVEL = 3 then a.PROCESS_LEVEL end) as PL_3,
max(case when a.POS_LEVEL = 4 then a.PROCESS_LEVEL end) as PL_4,
max(case when a.POS_LEVEL = 5 then a.PROCESS_LEVEL end) as PL_5,
max(case when a.POS_LEVEL = 6 then a.PROCESS_LEVEL end) as PL_6,
case when s.[DUAL EMPLOYEE] = 'UNASSIGNED' then ' ' else s.[DUAL EMPLOYEE] end as DUAL_EMPLOYEE,
case when m.PROCESS_LEVEL = s.[DUAL EMPLOYEE] then 'REVIEW' end as Dual_Process_Level_Comparison,
case
when m.PROCESS_LEVEL in ('CALL') then 1
when m.PROCESS_LEVEL in ('ECCHS', 'HCCHS') then 2
when m.PROCESS_LEVEL in ('ESCH', 'HCLER', 'HSCH') then 3
when m.PROCESS_LEVEL in ('LPBNO', 'LSBCR', 'LSBCW', 'LTBC','LTBH', 'LTBV', 'LTCLR', 'LTCS', 'LTHC','LTMON', 'LTSBC') then 4
when m.PROCESS_LEVEL in ('MELRO') then 5
when m.PROCESS_LEVEL in ('PLONG') then 6
when m.PROCESS_LEVEL in ('PNSVL') then 7
when m.PROCESS_LEVEL in ('SAUK') then 8
when m.PROCESS_LEVEL in ('TMONT') then 9
when m.PROCESS_LEVEL in ('WACM') then 10
when m.PROCESS_LEVEL in ('WCRS', 'WFPMC', 'WRDWF') then 11
end as Primary_Compare_Number,
case
when a.PROCESS_LEVEL in ('CALL') then 1
when a.PROCESS_LEVEL in ('ECCHS', 'HCCHS') then 2
when a.PROCESS_LEVEL in ('ESCH', 'HCLER', 'HSCH') then 3
when a.PROCESS_LEVEL in ('LPBNO', 'LSBCR', 'LSBCW', 'LTBC', 'LTBH', 'LTBV', 'LTCLR', 'LTCS', 'LTHC', 'LTMON', 'LTSBC') then 4
when a.PROCESS_LEVEL in ('MELRO') then 5
when a.PROCESS_LEVEL in ('PLONG') then 6
when a.PROCESS_LEVEL in ('PNSVL') then 7
when a.PROCESS_LEVEL in ('SAUK') then 8
when a.PROCESS_LEVEL in ('TMONT') then 9
when a.PROCESS_LEVEL in ('WACM') then 10
when a.PROCESS_LEVEL in ('WCRS', 'WFPMC', 'WRDWF') then 11
end as Supplemental_Compare_Number
from
dbo.vw_PAEMPPOS a
join dbo.COMPLETE_EMPLOYEE_MASTER m on m.EMPLOYEE = a.EMPLOYEE
join dbo.HR_EMPUSERFIELDS s on s.EMPLOYEE = m.EMPLOYEE
where END_DATE = '2099-12-31 00:00:00.000'
and EMP_STATUS NOT IN ('1A', 'RT', 'SZ', 'T1', 'XD', 'XV', 'ZZ')
group by
a.EMPLOYEE,
m.LAST_NAME,
m.FIRST_NAME,
m.PROCESS_LEVEL,
s.[DUAL EMPLOYEE],
a.PROCESS_LEVEL
--can’t have an order by here
) as b
order by Dual_Process_Level_Comparison desc, process_level_compare desc
结果
|EMPLOYEE|FIRST_NAME| LAST_NAME|PL_1 |PL_2 |PL_3|PL_4|PL_5|PL_6|DUAL EMPLOYEE|DUAL_PROCESS_LEVEL|process_level_compare|
+--------+----------+----------+-----+-----+----+----+----+----+-------------+------------------+---------------------+
|73202 | TEST | EMPLOYEE |MELRO|LSBCW|NULL|NULL|NULL|NULL|blank |NULL | REVIEW |
|73202 | TEST | EMPLOYEE |MELRO|NULL |NULL|NULL|NULL|NULL|blank |NULL | MATCH |
您可以看到这是一个重复的员工,它应该只显示一条记录。其中记录应该是最高记录。当我分组时
a.EMPLOYEE,
m.LAST_NAME,
m.FIRST_NAME,
m.PROCESS_LEVEL,
s.[DUAL EMPLOYEE],
a.PROCESS_LEVEL
这是我得到的结果。当我在下面创建这个新查询时,它只显示一条记录,因为 a.EMPLOYEE 是我唯一分组的记录。但是当您查看同一员工的输出时,process_level_compare 并没有说“审查”。但现在没有重复的员工。我在这里缺少什么来获得它,所以我没有更多的重复,所以它是否显示该员工的“匹配”?
select
b.EMPLOYEE,
FIRST_NAME,
LAST_NAME,
PL_1,
PL_2,
PL_3,
PL_4,
PL_5,
PL_6,
DUAL_EMPLOYEE,
Dual_Process_Level_Comparison,
case when b.Primary_Compare_Number <> b.Supplemental_Compare_Number then 'REVIEW' else 'MATCH' end as process_level_compare
FROM
(
select
a.EMPLOYEE,
Min(m.FIRST_NAME) as FIRST_NAME,
Min(m.LAST_NAME) as LAST_NAME,
MAX(m.PROCESS_LEVEL) as PL_1,
max(case when a.POS_LEVEL = 2 then a.PROCESS_LEVEL end) as PL_2,
max(case when a.POS_LEVEL = 3 then a.PROCESS_LEVEL end) as PL_3,
max(case when a.POS_LEVEL = 4 then a.PROCESS_LEVEL end) as PL_4,
max(case when a.POS_LEVEL = 5 then a.PROCESS_LEVEL end) as PL_5,
max(case when a.POS_LEVEL = 6 then a.PROCESS_LEVEL end) as PL_6,
MAX(case when s.[DUAL EMPLOYEE] = 'UNASSIGNED' then ' ' else s.[DUAL EMPLOYEE] end )as DUAL_EMPLOYEE,
MAX( case when m.PROCESS_LEVEL = s.[DUAL EMPLOYEE] then 'REVIEW' end) as Dual_Process_Level_Comparison,
MAX( case when m.PROCESS_LEVEL in ('CALL') then 1
when m.PROCESS_LEVEL in ('ECCHS', 'HCCHS') then 2
when m.PROCESS_LEVEL in ('ESCH', 'HCLER', 'HSCH') then 3
when m.PROCESS_LEVEL in ('LPBNO', 'LSBCR', 'LSBCW', 'LTBC','LTBH', 'LTBV', 'LTCLR', 'LTCS', 'LTHC','LTMON', 'LTSBC') then 4
when m.PROCESS_LEVEL in ('MELRO') then 5
when m.PROCESS_LEVEL in ('PLONG') then 6
when m.PROCESS_LEVEL in ('PNSVL') then 7
when m.PROCESS_LEVEL in ('SAUK') then 8
when m.PROCESS_LEVEL in ('TMONT') then 9
when m.PROCESS_LEVEL in ('WACM') then 10
when m.PROCESS_LEVEL in ('WCRS', 'WFPMC', 'WRDWF') then 11
end) as Primary_Compare_Number,
Max(case
when a.PROCESS_LEVEL in ('CALL') then 1
when a.PROCESS_LEVEL in ('ECCHS', 'HCCHS') then 2
when a.PROCESS_LEVEL in ('ESCH', 'HCLER', 'HSCH') then 3
when a.PROCESS_LEVEL in ('LPBNO', 'LSBCR', 'LSBCW', 'LTBC', 'LTBH', 'LTBV', 'LTCLR', 'LTCS', 'LTHC', 'LTMON', 'LTSBC') then 4
when a.PROCESS_LEVEL in ('MELRO') then 5
when a.PROCESS_LEVEL in ('PLONG') then 6
when a.PROCESS_LEVEL in ('PNSVL') then 7
when a.PROCESS_LEVEL in ('SAUK') then 8
when a.PROCESS_LEVEL in ('TMONT') then 9
when a.PROCESS_LEVEL in ('WACM') then 10
when a.PROCESS_LEVEL in ('WCRS', 'WFPMC', 'WRDWF') then 11
end )as Supplemental_Compare_Number
from
dbo.vw_PAEMPPOS a
join dbo.COMPLETE_EMPLOYEE_MASTER m on m.EMPLOYEE = a.EMPLOYEE
join dbo.HR_EMPUSERFIELDS s on s.EMPLOYEE = m.EMPLOYEE
where END_DATE = '2099-12-31 00:00:00.000'
and EMP_STATUS NOT IN ('1A', 'RT', 'SZ', 'T1', 'XD', 'XV', 'ZZ')
group by
a.EMPLOYEE
) as b
order by Dual_Process_Level_Comparison desc, process_level_compare desc
结果:
|EMPLOYEE|FIRST_NAME| LAST_NAME|PL_1 |PL_2 |PL_3|PL_4|PL_5|PL_6|DUAL EMPLOYEE| DUAL_PROCESS_LEVEL|process_level_compare|
+--------+----------+----------+-----+-----+----+----+----+----+-------------+-------------------+---------------------+
|73202 |TEST | EMPLOYEE |MELRO|LSBCW|NULL|NULL|NULL|NULL|blank |NULL | MATCH |
最终目标是每个员工有一个记录,但如果其中有任何值,则显示所有 PL_1 到 PL_6。如果 Primary_Compare_Number 与 Supplemental_Compare_number 不同,还要在 process_level_compare 列中标记“REVIEW”。
Desired Output
+--------+----------+----------+-----+-----+----+----+----+----+-------------+-------------------+---------------------+
|73202 |TEST | EMPLOYEE |MELRO|LSBCW|NULL|NULL|NULL|NULL|blank |NULL | REVIEW |
内部查询结果
|EMPLOYEE|FIRST_NAME| LAST_NAME|PL_1 |PL_2 |PL_3|PL_4|PL_5|PL_6|DUAL EMPLOYEE|DUAL_PROCESS_LEVEL|Primary_Compare_Number|Supplemental_Compare_Number|
+--------+----------+----------+-----+-----+----+----+----+----+-------------+------------------+---------------------+----------------------------+
|73202 | TEST | EMPLOYEE |MELRO|LSBCW|NULL|NULL|NULL|NULL|blank |NULL | 5 | 5 |
【问题讨论】:
标签: sql sql-server