首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归CTE以提取BOM (BOM表)

递归CTE以提取BOM (BOM表)
EN

Stack Overflow用户
提问于 2019-01-15 22:59:48
回答 1查看 53关注 0票数 0

我需要一些关于CTE的协助或指示。

我正在尝试提取物料清单,并且我已经使用了CTEs查询。查询运行良好,它会提取所有数据。我的努力是,有很多部件都有不同级别的新版本,而我只想获取新版本。目前,我的查询获取了所有内容。我有一个版本栏。

我尝试了一些不同的方法,比如尝试在ctes中使用max函数,但我得到了一个错误,说group by,不能作为递归CTEs的一部分。此外,我尝试使用子查询,但我没有得到正确的结果。

代码语言:javascript
复制
WITH BOM (
    Parent
    ,Child
    ,Qty
    ,Childrev
    ,LEVEL   
    ,sort
    )
AS (
    SELECT Parent
        ,cast(RTRIM(Child) AS NVARCHAR(max))
        ,Qty
        ,Childrev
        ,0 AS LEVEL
        ,cast(RTRIM(Child) AS NVARCHAR(max))
    FROM Bomtable

    UNION ALL

    SELECT BOM.Parent
        ,cast(RTRIM(Bomtable.Child) AS NVARCHAR(max))
        ,Bomtable.Qty
        ,BOM.Childrev
        ,LEVEL + 1
        ,CAST(BOM.Sort + '..... ' + RTRIM(Bomtable.Child) AS NVARCHAR(max))
    FROM BOM
    INNER JOIN Bomtable ON Bomtable.Parent = BOM.Child
    WHERE BOM.Parent = main product
    ORDER BY SORT
    )
EN

回答 1

Stack Overflow用户

发布于 2019-01-19 04:47:22

我知道我不完全理解您的数据模型。但是,请尝试使用如下所示的派生表替换您的BOMBomTable表,这样您就可以在不使用GROUP BY的情况下,为具有最大Childrev值的每个子记录提供一行。

代码语言:javascript
复制
SELECT *
FROM   (
           SELECT *
                , ROW_NUMBER() OVER (PARTITION BY Child ORDER BY Childrev DESC) AS ROW_NBR
           FROM   BOM
       ) AS x
WHERE  x.ROW_NBR = 1;

以下是OVER Clause的文档。

诺埃尔

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54201455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档