【发布时间】:2018-05-23 03:56:57
【问题描述】:
我有以下代码,我想用 CTE 进行递归并增加内部变量,以便递归可以使用它来执行子查询。
WITH cte as
(
select @layer as layers,
case when exists(select * from #table where layer=@layer and string in ('abc','xyz)) then 10 else 0 end
union all
select layers + 1, total
from cte
where layers + 1<4 -- 4 is a max number that is unknown and given by the user
)select * from cte
#table的结构如下,但数据量是动态的
string layer
abc 1
xyz 1
abc 2
xyz 2
所以在第 1 层,如果它有“abc”或“xyz”,它的点数为 10,第 2 层会发生同样的事情,直到用户给出的最大层。我想从递归中得到点和相应的级别。禁止循环和游标。我在递归中增加@layer 时遇到了麻烦。有什么建议吗?谢谢
【问题讨论】:
标签: sql sql-server sql-server-2008 recursion common-table-expression