如何遍历结果集并重复相同的操作直到最后一级

时间:2018-02-05 22:37:08

标签: sql sql-server database tsql

我正在尝试从产品类别中获取最后一层。扭曲是,类别得到子类别,最后一层只有parentId它的恐吓子类别。所以我试图获得子类别,然后使用该子类别id再次做同样的事情,直到它到达最后一类。识别最后一个类别的唯一方法是线型。所以我想用while循环,但我都很困惑。

例如

Declare @x Varchar(200)
Set @x = 'H506563'

Select stockCode
FROM stock
Where ParentStockCode = @x 

它返回stockCode的集合,它将在下一次迭代中成为ParentStockCode,然后每个将再次给出stockCodes集合。因此,此过程将持续到我进入lineType为S的最后一级。

有没有办法做到这一点。任何建议都会有所帮助。谢谢 希望这有助于更好地理解

enter image description here

具有零件编号的最后一级 -

enter image description here

1 个答案:

答案 0 :(得分:0)

您没有提供足够的样本数据。所以我无法检查查询。查询应仅返回带有LineType = 'S'的stockCode。您应该提供更多样本数据(而非图片)以获得更好的帮助

declare @x varchar(200) = 'H506563'

;with rcte as (
    select
        StockCode, ParentStockCodeNo, LineType
    from
        stock
    where
        ParentStockCodeNo = @x
    union all
    select
        b.StockCode, b.ParentStockCodeNo, b.LineType
    from
        rcte a
        join stock b on a.StockCode = b.ParentStockCodeNo
)

select StockCode
from rcte
where LineType = 'S'

option (maxrecursion 0)