gpt4 book ai didi

sql - 递归 CTE Material list

转载 作者:行者123 更新时间:2023-12-03 03:48:32 25 4
gpt4 key购买 nike

这是我的第一个问题,如果我不够清楚,请原谅我。

我的任务是获取组件( Material list )的所有组件的总成本。基本上,我想查询保存组件采购订单分配的表,以便获得当前与未过帐装配相关的成本。

这很棘手,因为程序集的组件可能是程序集本身,在这种情况下,我需要查询另一个表,该表保存有关其他程序集是否链接到此主程序集的信息。 (我已进行检查以确保不会发生过度分配,但可能尚未分配任何内容,这没关系)在这种情况下,查询采购订单分配表中该装配编号的组件,并将这些成本添加到父程序集的总计。

我第一次使用 CTE,但运气不太好。任何人都可以帮助确定我在这里做错了什么吗?

anchor 拉入所有组件(不包括子组件)以及我试图确定成本的主组件采购订单中的单位成本和数量。

递归部分应该为已存在于 BM10200_AssemblyQtyDetail 表中的组件提取组件、成本和数量。如果父装配体位于 TRANNUM 列中,则该行的 TRX_ID 是链接装配体,该装配体是主装配体的子装配体零部件。

USE HT
GO
WITH BOMCost (Assembly, Component, PriceFromPO, Qty, BOMLevel)
AS
(
-- Anchor member definition
SELECT asl.TRX_ID, asl.ITEMNMBR, asl.UNITCOST, asl.SERLTQTY,
0 AS BOMLevel
FROM HT.DBO.BM10400 AS asl
WHERE asl.TRX_ID = 'ASM0002909'
UNION ALL
-- Recursive member definition
SELECT asl.TRX_ID, asl.ITEMNMBR, asl.UNITCOST, asl.SERLTQTY,
BOMLevel + 1
FROM HT.DBO.BM10400 AS asl
INNER JOIN HT.DBO.BM10200_AssemblyQtyDetail AS bqd
ON asl.TRX_ID = bqd.TRANNUM
INNER JOIN BOMCost AS bc
ON bqd.TRX_ID = bc.Assembly
)


-- Statement that executes the CTE
SELECT Assembly, Component, PriceFromPO, Qty, BOMLevel
FROM BOMCost

重申一下,这里的问题是,这仅返回主装配体的组件,不包含任何子装配体相关成本。所以只是顶层的组件。我在链接表中有一条记录,将该 BM 子组件的组件链接到主组件,但它不会拉取该组件编号的组件。我认为这可能与递归部分连接有关。如有任何帮助,我们将不胜感激!

这是数据场景。 ASM0002909 是一个组件,其组件本身就是一个组件。 ASM0002914 与 ASM0002909 同时构建,其本身有两个组件。我只想获取实际从 PO 收到的成本,因此是否需要其他组件但尚未收到也没关系。以下是应将所有内容相加的内容 (SERLTQTY * UNITCOST),以获得主组件的总成本。

Assembly Serial Lot Table

这是我当前从查询中得到的结果。它应该运行一次递归步骤并返回 ASM0002914 结果。 Results from my CTE

我已经使用两个主表、数据和我当前使用的 SQL 查询设置了一个 sqlfiddle,该查询仍然没有拾取子组件组件,并且返回超出递归限制的错误。 http://sqlfiddle.com/#!3/bd1b98/6

最佳答案

我可能遗漏了一些东西,但您的JOIN条件似乎排除了递归:

内部连接 ​​BOMCost AS bc
ON bqd.TRX_ID = bc.Assembly

ASM0002909 不等于 ASM0002914,因此底部没有结果。

更新:

WITH BOMCost (Assembly, Component, PriceFromPO, Qty, BOMLevel)
AS
(
-- Anchor member definition
SELECT asl.TRX_ID, asl.ITEMNMBR, asl.UNITCOST, asl.SERLTQTY,
0 AS BOMLevel
FROM DBO.BM10400 AS asl
WHERE asl.TRX_ID = 'ASM0002909'
UNION ALL
-- Recursive member definition
SELECT asl.TRX_ID, asl.ITEMNMBR, asl.UNITCOST, asl.SERLTQTY,
BOMLevel + 1
FROM DBO.BM10400 AS asl
INNER JOIN DBO.BM10200_AssemblyQtyDetail AS bqd
ON asl.TRX_ID = bqd.TRX_ID
INNER JOIN BOMCost AS bc
ON bqd.TRANNUM = bc.Assembly

)


-- Statement that executes the CTE
SELECT DISTINCT Assembly, Component, PriceFromPO, Qty, BOMLevel
FROM BOMCost

演示:SQL Fiddle

关于sql - 递归 CTE Material list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com