当name_有现场处理的时候,取现场处理,多个现场处理的时候取第2个现场处理。
当name_没有现场处理的时候(网维和客服都存在),取网维处理,没有网维处理的时候取客服处理。
不管什么情况都不会取到过滤分派或回访对应的数据
表结构如下(以id排序,proc_inst_id分组,name数据不固定):
ID_ PROC_INST_ID_ NAME_ ASSIGNEE_
85224 85217 过滤分派 191500256
85231 85217 现场处理 191500389
85236 85217 网维处理 191500112
85241 85217 客服处理 191500156
85246 85217 回访 191500156
------解决思路----------------------
with cte(ID ,PROC_INST_ID_,_NAME ,ASSIGNEE_) as
(
select 85224,85217,'过滤分派', 191500256 union all
select 85231,85217,'现场处理', 191500389 union all
select 85236,85217,'网维处理', 191500112 union all
select 85241,85217,'客服处理', 191500156 union all
select 85246,85217,'回访', 191500156 union all
select 85247,85217,'现场处理', 191500156 --union all
--select 85248,85217,'现场处理', 191500156
),
cte1 as
(
select ID,_NAME,PROC_INST_ID_,ASSIGNEE_
,ROW_NUMBER() over (PARTITION by _name order by id) n--用来查找第二个现场处理
,case
when _NAME = '现场处理' then 1
when _NAME = '网维处理' then 2
when _NAME = '客服处理' then 3 else 4 end n1--最后按照n1排序取结果
from cte
where _NAME <>'回访' and _NAME<>'过滤分派'
),
cte2 as
(
--取现场处理
select * from cte1
where id in
(
select MAX(id)
from cte1
where n<=2 and n1 = 1--取第二个现场处理
group by n1
)
union all
--其余数据
select * from cte1
where n1<>1
)
select top 1 ID ,PROC_INST_ID_,_NAME ,ASSIGNEE_ from cte2
order by n1
/*
ID PROC_INST_ID_ _NAME ASSIGNEE_
----------- ------------- -------- -----------
85247 85217 现场处理 191500156
(1 行受影响)
*/
------解决思路----------------------
确认一下你的逻辑。
1)同一PROC_INST_ID_,Name='现场处理'的数据只有一条,就选这一条。
2)同一PROC_INST_ID_,Name='现场处理'的数据大于等于两条,就选第二条。
3)同一PROC_INST_ID_,Name!='现场处理'的数据,就选Name=‘网维处理’的数据(第一条)。
4)同一PROC_INST_ID_,Name!='现场处理'且Name!=‘网维处理’的数据,就选Name=‘客服处理’的数据(第一条)。
5)不管什么情况都不会取到过滤分派或回访对应的数据。
照你的逻辑,在同一PROC_INST_ID_,Name没有‘现场处理’,‘网维处理’,‘客服处理’的数据,这样就会找不出这个PROC_INST_ID_的数据,不是吗?
create table cte(ID int ,PROC_INST_ID_ int, NAME nvarchar(10) ,ASSIGNEE_ varchar(20))
insert cte
select 85224, 85217,'過濾分派',191500256 union all
select 85231, 85217,'現場處理',191500389 union all
select 85236, 85217, '網維處理',191500112 union all
select 85241, 85217,'客服處理',191500156 union all
select 85246, 85217, '回訪',191500156 union all
select 85249, 85217, '現場處理',191500156 union all
select 85224, 85218,'過濾分派',191500256 union all
select 85236, 85218, '網維處理',191500112 union all
select 85241, 85218,'客服處理',191500156 union all
select 85246, 85218, '回訪',191500156 union all
select 85249, 85218, '現場處理',191500156 union all
select 85224, 85219,'過濾分派',191500256 union all
select 85236, 85219, '網維處理',191500112 union all
select 85241, 85219,'客服處理',191500156 union all
select 85246, 85219, '回訪',191500156 union all
select 85224, 85220,'過濾分派',191500256 union all
select 85231, 85220,'現場處理',191500389 union all
select 85236, 85220, '網維處理',191500112 union all
select 85241, 85220,'客服處理',191500156 union all
select 85246, 85220, '回訪',191500156 union all
select 85249, 85220, '現場處理',191500156 union all
select 85247, 85220,'現場處理',191500389 union all
select 85224, 85221,'過濾分派',191500256 union all