把表结构和你最后想要的格式发出来,并说明对应关系
根据你的问题,你这个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实测截图
用distinct处理不就可以吗