我有一个包含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
在此先感谢您的任何投入。
如果需要在单独的列中使用值,则使用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 <>小提琴。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。