问题描述
如何从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;