如何从查询中的另一行获取值

问题描述

如何从sql的另一行获取价值?

ID  DeletedPersonID  ProductKey    PartyID       RespID  
9     461               17            33           95      
10    95                17            34           95

我有这个选择语句

select
      drp.ID,drp.DeletedPersonID,drp.ProductID,case when drp.DeletedPersonID != drp.RespID then (Get Party Key by RespID) else drp.PartyID end as 'PartyID',case when drp.DeletedPersonID != drp.RespID then (Get Party Key by RespID) else drp.PartyName end as 'PartyName',case when drp.DeletedPersonID = drp.RespID then null else drp.PartyID end as 'SubPartyID',from dbo.RespHistory drp

在上面的示例中,由于ID = 10具有相同的DeletedPersonID和RespID值,所以我想使用相同的PartyID,但是在ID = 9或第一行中,因为DeletedPersonID和RespID是不同的,所以我想使用{{{ 1}}

我正在寻找类似于下图的视图

ID = 10

解决方法

类似这样的东西

with equals_cte (RespID) as (
    select RespID
    from dbo.RespHistory
    where DeletedPersonID = RespID
)
select
    drp.ID,drp.DeletedPersonID,drp.ProductKey,coalesce(ec.RespID,drp.RespID) PartyID,drp.PartyName,drp.RespID,iif(drp.DeletedPersonID = drp.RespID,null,drp.RespID) SubPartyID
from dbo.RespHistory drp
left join equals_cte ec on drp.RespID = ec.RespID;