我需要有关CTE的帮助或指导。
我正在尝试提取物料清单,并且使用了CTE查询。该查询工作良好,并且提取了所有数据。我的奋斗是有很多零件,其中零件具有不同级别的新版本,我只想获取新版本。目前,我的查询可以获取所有内容。我有一个版本专栏。
我尝试了几种不同的尝试,例如尝试在CTE中利用max函数,但是却遇到了一个错误,说不能通过归类cte进行分组。
另外,我尝试使用子查询,但没有得到正确的结果。
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
)
答案 0 :(得分:0)
我知道我不完全了解您的数据模型。但是,尝试用这样的派生表替换您的 BOM 和 BomTable 表,这样将为每个具有Childrev值最大的子记录提供一行,而无需使用GROUP BY。
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的文档。
Noel