2009-11-19 63 views
2

我正在開發一個物料清單成本計算器程序,我正在努力弄清楚我想要的一些遞歸選擇的簡單解決方案。最簡單的方法來做多個選擇的遞歸t-sql

我正在爲這部分應用程序使用SQL Server 2005。

說我有產品A,其中包含組件B和部件C.組件B將包含部件D和E,但是,這裏是我奮鬥的地方,D和或E可能包含X個其他組件。

我可以做一些事情;

SELECT * FROM TBLBOM WHERE Parent = A 
UNION 
SELECT * FROM TBLBOM WHERE Parent = B 
UNION 
SELECT * FROM TBLBOM WHERE Parent = C 

爲了生產一些東西沿線;

PARENT COMP COST 
A   X  £1 
B   D  £0.5 
B   E  £0.5 
.... 
C   Y  £1 

但可以說成分d由成分F &的G,我怎麼會適應這種在T-SQL語句。

簡而言之,我需要擴展與父產品相關聯的所有組件的完整組件列表,而不管它們是在子組件還是在子組件等的子組件中...

理想情況下,我想避免光標不惜一切代價:)

任何幫助/指導,將不勝感激。

謝謝。

編輯; 按照要求,這裏是表結構和預期輸出。父類是DRAWINGNO,子節點是PART(它本身也可以是父類);

BOMID  DRAWINGNO   ITEM   PART    COST  
1303  HGR05180   1    HGR05370   1 
1304  HGR05180   2    HGF65050   4 
1305  HGR05180   3    HGF50340   1 
1312  HGR05370   1    HPN05075   1 
1313  HGR05370   2    HPN05085   2 
1314  HGR05370   3    HPN05080   1 
1848  EXP-18G   1    HGR05180   1 
1849  EXP-18G   2    HGR05210   3 
1850  EXP-18G   3    HGR05230   1 
1851  EXP-18G   4    HGR05140   1 
1852  EXP-18G   5    HGR05150   2 
1853  EXP-18G   6    HGR05050   1 
1854  EXP-18G   7    ESC05350   1 
1855  EXP-18G   8    ESC05330   3 
1856  EXP-18G   9    HGR05360   1 
1857  EXP-18G   10    HGR05370   2 
1858  EXP-18G   11    ESC05640   1 
+0

東西能宥提供表strucure – 2009-11-19 15:56:27

回答

5

如果我理解(和無表結構),你可以嘗試這樣的

DECLARE @Table TABLE(
     Component VARCHAR(50), 
     Parent VARCHAR(50), 
     Cost FLOAT 
) 

INSERT INTO @Table SELECT 'B', 'A', 1 
INSERT INTO @Table SELECT 'C', 'B', 2 
INSERT INTO @Table SELECT 'C', 'B', 3 
INSERT INTO @Table SELECT 'D', 'C', 4 

DECLARE @Product VARCHAR(50) 
SET @Product = 'A' 

;WITH Selects AS (
     SELECT * 
     FROM @Table 
     WHERE Parent = @Product 
     UNION ALL 
     SELECT t.* 
     FROM @Table t INNER JOIN 
       Selects s ON t.Parent = s.Component 
) 

SELECt * 
FROm Selects 
+0

完美。非常感謝你 :) – CaRDiaK 2009-11-19 16:57:42

0

您希望使用遞歸公用表表達式(CTE)。聯機叢書有許多關於如何使用這些信息;在索引中查找CTE並選擇「使用通用表表達式的遞歸查詢」條目。 (我在鏈接到BOL在線之前遇到了問題,或者我嘗試將它鏈接到此處)。

另外,如果您發佈表結構,則應在五分鐘內得到六個例子。更好的是,嘗試搜索以前的例子。