| 庫存單位 | 物料清單 | 班級 |
|---|---|---|
| RM123 | D | |
| WPR123 | RM123 | C |
| WPR456 | RM123 | C |
| 123 | WPR123 | 乙 |
| 456 | WPR456 | 一個 |
想象一下,所有這些都在一張表中,如圖所示。我想要的是從原始 RM123 開始檢索 SKU 123 和 456 的類。這似乎是一個回圈連接,我無法理解。請幫忙。
uj5u.com熱心網友回復:
這聽起來像你想要一個遞回 CTE(這里和這里的一些背景)。
使用此表和示例資料:
CREATE TABLE dbo.ImagineThis
(
SKU varchar(32),
BOM varchar(32),
CLASS varchar(32)
);
INSERT dbo.ImagineThis(SKU,BOM,CLASS) VALUES
('RM123' , '', 'D'),
('WPR123', 'RM123' , 'C'),
('WPR456', 'RM123' , 'C'),
('123' , 'WPR123', 'B'),
('456' , 'WPR456', 'A');
一種方法是:
;WITH cte AS
(
SELECT lvl = 1, SKU, BOM, CLASS, Path = CONVERT(nvarchar(max), SKU)
FROM dbo.ImagineThis
WHERE BOM = ''
UNION ALL
SELECT lvl = lvl 1, i.SKU, i.BOM, i.CLASS, Path = cte.Path '\' i.SKU
FROM cte
INNER JOIN dbo.ImagineThis AS i
ON i.BOM = cte.SKU
)
SELECT * FROM cte OPTION (MAXRECURSION 32000);
結果:
| 等級 | 庫存單位 | 物料清單 | 班級 | 小路 |
|---|---|---|---|---|
| 1 | RM123 | D | RM123 | |
| 2 | WPR123 | RM123 | C | RM123\WPR123 |
| 2 | WPR456 | RM123 | C | RM123\WPR456 |
| 3 | 456 | WPR456 | 一個 | RM123\WPR456\456 |
| 3 | 123 | WPR123 | 乙 | RM123\WPR123\123 |
雖然我不確定您是如何得出答案“A”的,因為這兩條路徑看起來“相等”,并且 A 和 B 都處于相同的“水平”。您可以通過將輸出限制為最高級別來看到這一點:
;WITH cte AS
(
...
)
SELECT TOP (1) WITH TIES *
FROM cte
ORDER BY lvl DESC
OPTION (MAXRECURSION 32000);
為什么你認為“A”是最終產品?
- 示例db<>fiddle
至于為什么A
“A”(類)將是繼承權方面的最終答案。A = 1,B = 2,等等。我會用這個定義創建一個臨時表或 CTE。
行:
DECLARE @ClassHierarchy table(Class varchar(32), Ordering tinyint);
INSERT @ClassHierarchy VALUES('A',1),('B',2),('C',3),('B',4);
;WITH cte AS
(
SELECT lvl = 1, SKU, BOM, CLASS, Path = CONVERT(nvarchar(max), SKU)
FROM dbo.ImagineThis
WHERE BOM = ''
UNION ALL
SELECT lvl = lvl 1, i.SKU, i.BOM, i.CLASS, Path = cte.Path '\' i.SKU
FROM cte
INNER JOIN dbo.ImagineThis AS i
ON i.BOM = cte.SKU
)
SELECT TOP (1) WITH TIES cte.*
FROM cte
INNER JOIN @ClassHierarchy AS h
ON cte.CLASS = h.Class
ORDER BY lvl DESC, h.Ordering
OPTION (MAXRECURSION 32000);
結果:
| 等級 | 庫存單位 | 物料清單 | 班級 | 小路 |
|---|---|---|---|---|
| 3 | 456 | WPR456 | 一個 | RM123\WPR456\456 |
- 更新了db<>fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/408469.html
標籤:
上一篇:如何限制MaterialUITextField中的數字(即使是字串型別)?
下一篇:一次保存所有更改-MSSQL
