开发者社区> 问答> 正文

递归T-SQL-这种情况可能吗?

我有一个包含Client字段和Owner of the Client字段的表,例如“ Amazon UK”和“ Amazon.com,Inc.”。分别。还可能发生的情况是,客户端的所有者也可以具有所有者,因此将出现在“客户端”字段中,这种情况可以一次又一次地发生,但最终将停止。

例:


Client          Owner of the Client
123             234
234             345
345             456
567             678
789             890

因此,我想知道递归SQL是否是最好的方法?还有没有办法让它出现在每个单独的列中

Client          Owner of Client          Owner of Client         Owner of Client
123             234                      345                     456
567             678                      NULL                    NULL
789             890                      NULL                    NULL

在此先感谢您的任何投入。

展开
收起
Puppet 2020-01-05 10:46:11 493 0
1 条回答
写回答
取消 提交回答
  • 如果需要在单独的列中使用值,则使用joins或某种类型的动态SQL是一种很好的方法。不幸的是,SQL Server不支持数组。

    但是您可以将值放入字符串中(或根据需要放入JSON或XML对象中)。看起来像:

    
    with cte as (
          select t.client, convert(varchar(max), t.owner) as owners, owner as last_owner, 1 as lev
          from t
          where not exists (select 1 from t t2 where t2.owner = t.client)
          union all
          select cte.client, concat(cte.owners, ',', t.owner), t.owner, lev + 1
          from cte join
               t
               on t.client = cte.last_owner
         )
    select top (1) with ties client, owners
    from cte
    order by row_number() over (partition by client order by lev desc); 
    

    这是db <>小提琴。

    2020-01-05 10:47:09
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载