0
私の再帰的なCTEをストアドプロシージャで見てみてください。それは、これは正しく、しかし、いくつかのバグがあるん、 BOM再帰CTE /部品の爆発。 CTEのバグ
合計COMPONENTID、名前: 再帰CTEを持つテーブルで私を提供し、この作業では
- 、AssemblyIdがなければなりませんnull可能です。アセンブリのないコンポーネント(孤児など)は、親に対してnullのdbに配置する必要があります。
- また、BOMcteを実行しているコンポーネントがクエリで取得されます。例えば私がコンピュータを検索すると、1xマザーボード、4x RAM、1x CPU、1xCaseのようなものを返すと期待しています。代わりに、1xComputer、1xマザーボード、4x Ram、1x CPU、1xCaseを返します。
- 問題2の後、私たちはコンピュータを作るために4つのRAMが必要であることを知っています。 RAM上でBOMcteを実行すると、4つが必要であることがわかります。それは間違った方法で働いています。
誰でも助けてもらえますか?
私は、ストアドプロシージャに渡すと、ParentIdと再帰的クエリは、必要なすべての子と量を検出します。親に子がない場合、CTEは空のテーブルを返す必要があります。
事前に感謝します。
ALTER PROCEDURE dbo.SP_PartExploder
@pid int
AS
/* SET NOCOUNT ON */
WITH BOMcte(ComponentId, Name, Quantity, AssemblyId)
AS
(
SELECT b.ComponentID,
p.Name,
b.Quantity,
b.AssemblyId
FROM PartComponents AS b
INNER JOIN Parts p
on b.ComponentId = p.PartId
WHERE b.ComponentId = @pid
UNION ALL
SELECT b.ComponentID,
p.Name,
b.Quantity,
b.AssemblyId
FROM PartComponents as b
INNER JOIN Parts p
ON b.ComponentId = p.PartId
INNER JOIN BOMcte AS cte
ON b.AssemblyId = cte.ComponentId
)
SELECT ComponentId, Name, sum(Quantity) as Total
FROM BOMcte
group by ComponentId, Name;
RETURN