使用SQL获取根事务

时间:2017-02-07 09:39:40

标签: sql sql-server sql-server-2016

我有一系列的记录。根据以下数据,如何获取 Doc Nos 等同于 9600012264

的根交易(XR)

图例

        Glide.with(mContext)
                .load(message)
                .into(mVideoThumbnailView);

数据

XR - is the lowest root transaction
XZ - is the highest root transaction
XA - can generate multiple times

CONDITION

Doc Nos      Type   TY    Amount     Cleared Doc
9500011864 | A121 | XR | 36247.62  | 9000001659 
9000001659 | A121 | XA |     1.00  | 9000001660 
9000001660 | A121 | XA | 36242.86  | 9600012264
9600012264 | A121 | XZ | -72490.48 | 9600012264

渴望输出

Doc Nos : 9600012264 
TY      : XZ 

SQL CTE Recursive是否适用于此方法。我正在使用SQL Server 2016?需要帮助。有人可以为我做代码然后我会改进它。

1 个答案:

答案 0 :(得分:0)

递归CTE,注意数据中的自引用。希望没有其他周期存在。如果需要,调整数据类型。

declare @DocNos varchar(20) = '9600012264';
declare @TY varchar(10) ='XZ';
with rc as (
    select *
    from Transactions t
    where [Doc Nos] = @DocNos and TY=@TY
    union all
    select t.* 
    from Transactions t
    join rc on t.[Cleared Doc] = rc.[Doc Nos] 
       -- stop at self ref
       and rc.[Doc Nos] != t.[Doc Nos]
       and rc.TY !='XR'
)
select *  
from rc
where TY='XR';