Sql 基于列值获取活动记录
我有一个名为BusinessAssociate的数据库表,出于复杂性考虑,该表中有两列Sql 基于列值获取活动记录,sql,tsql,Sql,Tsql,我有一个名为BusinessAssociate的数据库表,出于复杂性考虑,该表中有两列 BusinessAssociateKey int AmalgamatedIntoBAKey int 使用BusinessAssociateKey,我们可以加入其他表,其中一个表(BACorporateStatus)告诉我们该BusinessAssociateKey是活动的还是合并的 假设业务关联键123456合并到BA键987654中,在同一个表中会有一行,BusinessAssociateKey为9876
BusinessAssociateKey int
AmalgamatedIntoBAKey int
使用BusinessAssociateKey,我们可以加入其他表,其中一个表(BACorporateStatus)告诉我们该BusinessAssociateKey是活动的还是合并的
假设业务关联键123456合并到BA键987654中,在同一个表中会有一行,BusinessAssociateKey为987654,这一行也可能合并到BusinessAssociateKey 283746中
在per BusinessAssociateKey上是否有办法找到活跃(非合并)的业务伙伴
链的数量未知,可能为无,也可能为n
编辑:这是一个SQL FIDLE,在本例中,BusinessAssociateKey 56781未合并,因此对于BusinessAssociateKey 123,幸存/活动BA键为56781。递归:
;with rec_cte as(
select b1.BusinessAssociateKey, b1.AmalgamatedIntoBAKey, 1 as rn
from BusinessAssociate b1 left outer join BusinessAssociate b2 on b1.BusinessAssociateKey = b2.AmalgamatedIntoBAKey
where b2.BusinessAssociateKey is null
union all
select c.BusinessAssociateKey, b.AmalgamatedIntoBAKey, c.rn + 1
from rec_cte c inner join BusinessAssociate b on c.AmalgamatedIntoBAKey = b.BusinessAssociateKey
where b.AmalgamatedIntoBAKey is not null),
cte as(
select BusinessAssociateKey, max(rn) as rn
from rec_cte
group by BusinessAssociateKey)
select r.BusinessAssociateKey, r.AmalgamatedIntoBAKey
from rec_cte r inner join cte c on r.BusinessAssociateKey = c.BusinessAssociateKey and r.rn = c.rn
option (maxdop 0)
与表进行自联接。在这里,我添加了行号,以使用自联接获取最后的记录
Select F.Nbr, F.BusinessAssociateKey, F.AmalgamatedIntoBAKey
From
(Select row_number() Over(order by (select 1)) as Nbr, E.BusinessAssociateKey, E.AmalgamatedIntoBAKey
From BusinessAssociate E
) F
LEFT OUTER JOIN
(Select row_number() Over(order by (select 1)) as Nbr, E.BusinessAssociateKey, E.AmalgamatedIntoBAKey
From BusinessAssociate E
) K
ON F.AmalgamatedIntoBAKey = K.BusinessAssociateKey
where K.Nbr IS NULL
没错,但如果你看小提琴,比如说我的业务关联键是123,我想“走下”链条,得到最后一个激活的BA键Close,但我想要的结果是原来的BusinessAssociateKey(123),我想合并的键是56781