Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于列值获取活动记录_Sql_Tsql - Fatal编程技术网

Sql 基于列值获取活动记录

Sql 基于列值获取活动记录,sql,tsql,Sql,Tsql,我有一个名为BusinessAssociate的数据库表,出于复杂性考虑,该表中有两列 BusinessAssociateKey int AmalgamatedIntoBAKey int 使用BusinessAssociateKey,我们可以加入其他表,其中一个表(BACorporateStatus)告诉我们该BusinessAssociateKey是活动的还是合并的 假设业务关联键123456合并到BA键987654中,在同一个表中会有一行,BusinessAssociateKey为9876

我有一个名为BusinessAssociate的数据库表,出于复杂性考虑,该表中有两列

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