SQL层次结构循环/递归查询/自连接
我已收到一份已批准或未批准的订单列表 我想要的是一个概览表,在同一列中包含所有批准的订单及其子订单。最好在它旁边有一个层次/顺序级别,指示深度SQL层次结构循环/递归查询/自连接,sql,sql-server,recursive-query,Sql,Sql Server,Recursive Query,我已收到一份已批准或未批准的订单列表 我想要的是一个概览表,在同一列中包含所有批准的订单及其子订单。最好在它旁边有一个层次/顺序级别,指示深度 您可以使用如下使用CTE的查询 子订单表非常大,只有3-4个级别处于焦点位置 对于这一变化,您的CTE将是 ; with CTE as ( select OrderNumber, Number = 0, Level = ROW_NUMBER() OVER (ORDER BY (SE
您可以使用如下使用CTE的查询 子订单表非常大,只有3-4个级别处于焦点位置 对于这一变化,您的CTE将是
; with CTE as
(
select
OrderNumber,
Number = 0,
Level = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
SubLevel = 1
from Orders
where Status='approved'
union all
select
OrderNumber = S.SubOrders,
Number = CAST(SUBSTRING(S.SubOrders,CHARINDEX('.',S.SubOrders)+1, LEN(S.SubOrders)-CHARINDEX('.',S.SubOrders)) AS INT),
Level = C.Level,
SubLevel = C.SubLevel +1
from CTE C JOIN
OrderHistory S
on S.OrderNumber=C.OrderNumber
and C.SubLevel<5
)
我被你期望的等级制度弄糊涂了。我知道在你的例子中ABC是1.0,但是ABC.4、ABC.5、ABC.6不是在同一水平吗?ABC.3是ABC.4的子订单,难道不应该是第二级吗?我在Oracle做了一些事情。。这将是非常相似的这是sql server版本@basodre,你是对的,很可能这个例子有误导性。其目的是在同一列中创建一个从订单到子订单的层次结构。这很好-我几乎达到了我想要的程度:-数字逻辑基于。属于亚目。我们如何将其更改为一个常规的等级-无论其级别如何?最后,我可以限制每个子订单的递归查找的数量吗?例如仅返回订单的最多3个子订单级别?子订单表非常大,只有3-4级处于焦点位置。另外,如果我理解您删除数字逻辑的意思-将上次选择替换为选择订单号,Hierarchy=CONCATLevel,“.”,从CTE订单逐级ASC的子级别,子级别ASC
; with CTE as
(
select
OrderNumber,
Number = 0,
Level = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)),
SubLevel = 1
from Orders
where Status='approved'
union all
select
OrderNumber = S.SubOrders,
Number = CAST(SUBSTRING(S.SubOrders,CHARINDEX('.',S.SubOrders)+1, LEN(S.SubOrders)-CHARINDEX('.',S.SubOrders)) AS INT),
Level = C.Level,
SubLevel = C.SubLevel +1
from CTE C JOIN
OrderHistory S
on S.OrderNumber=C.OrderNumber
and C.SubLevel<5
)