我需要一些关于CTE的协助或指示。
我正在尝试提取物料清单,并且我已经使用了CTEs查询。查询运行良好,它会提取所有数据。我的努力是,有很多部件都有不同级别的新版本,而我只想获取新版本。目前,我的查询获取了所有内容。我有一个版本栏。
我尝试了一些不同的方法,比如尝试在ctes中使用max函数,但我得到了一个错误,说group by,不能作为递归CTEs的一部分。此外,我尝试使用子查询,但我没有得到正确的结果。
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
)发布于 2019-01-19 04:47:22
我知道我不完全理解您的数据模型。但是,请尝试使用如下所示的派生表替换您的BOM和BomTable表,这样您就可以在不使用GROUP BY的情况下,为具有最大Childrev值的每个子记录提供一行。
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的文档。
诺埃尔
https://stackoverflow.com/questions/54201455
复制相似问题