2015-10-06 75 views
-1

如果有人能就我的问题提出建议,我将不胜感激。在SELECT语句中循环引用

在我的表中的每个记录有另一条记录,例如参考:

ID  DEBIT_ACCT_NO CREDIT_ACCT_NO ID_REF AS_OF_DATE 

REF1 NOSTRO123  USD111   NULL 03.06.2015 
REF2 USD111   USD222   REF1 08.06.2015 
REF3 USD222   CLIENT1982  REF2 10.06.2015 

在这里,我需要找到最初的交易,第3的记录(总是出现在信用账户为客户帐户),输出将是

ID  INITIAL_ID 
REF3  REF1 

这种转换的次数可能会有所不同。假设初始交易总是有DEBIT_ACCT_NO等于NOSTRO123。我不确定CTE能否在这里帮助。

非常感谢!

+1

你尝试过什么?什么是'INITIAL_ID'?它总是基于'AS_OF_DATE'的第一个参考吗? –

+0

它看起来像一个递归的'cte'的用例,我没有看到什么让你认为'cte'可能没有帮助? –

+0

CTE肯定会有帮助,你试过了什么? –

回答

0

也许以下recursive SQL query可以帮助你

;with cte as (
    select cast(a.ID as varchar(20)) as [Source], a.ID, a.ID_REF 
    from accounts a where ID = 'REF3' 
    union all 
    select cte.Source, a.ID, a.ID_REF 
    from accounts a 
    inner join cte on cte.ID_REF = a.ID 
) 
select [Source] ID, ID ID_REF 
from cte 
where ID_REF is null 
+0

正是我需要的,谢谢 –