同一个申请人可以对应不同的approver和不同的group
申请有多条申请记录,用sql语句是否可以去重后达到保留同一个申请人相同的approver和group只保留一条记录
把表结构和你最后想要的格式发出来,并说明对应关系
根据你的问题,你这个sql应该改写成下面这个样子
select distinct
a.UserID,
b.Approver,
c.GroupName
from [ dbo ] . [ UserList ] a
left join [ dbo ] . [ ApproverMapping ] b
on a.GroupID = b.GroupID
left join [ dbo ] . [ GroupMapping ] c
on b.GroupID = c.ID
where Approver <> ''
and Team = 'Requester'
根据题主补充描述,可使用开窗函数结合nullif函数使上下相邻两个格子中重复数据只保留一个,其他变为空值,如下
select nullif(c.GroupName, lag(c.GroupName) over(order by c.GroupName,a.UserID,b.Approver)) GroupName,
a.UserID,
b.Approver
from UserList a
left join ApproverMapping b
on a.GroupID = b.GroupID
left join GroupMapping c
on b.GroupID = c.ID
where Approver <> ''
and Team = 'Requester'
order by c.GroupName,a.UserID,b.Approver
下面是sqlserver实测截图