|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
zzbdyx
註冊時間: 2004-02-04 文章: 37
第 1 樓
|
發表於: 星期二 九月 08, 2009 11:54 am 文章主題: 存儲過程求助 |
|
|
現有一BOM表,結構如下:
par_lpbh com_lpbh qty
有一產品BOM記錄如下
A B 1.00
A C 2.00
B D 1.00
B E 1.00
如何寫存儲過程展開此BOM,即要得到如下結果
階層 子件 用量
*1 B 1.0
**2 D 1.00
**2 E 1.00
*1 C 2.00 |
|
回頂端 |
|
|
yoncen
註冊時間: 2005-08-29 文章: 33
第 2 樓
|
發表於: 星期五 十二月 04, 2009 9:00 pm 文章主題: |
|
|
/*BOM树结构显示*/
IFIF EXISTS(SELECT * FROM sysobjects
WHERE name = 'BOM' AND xType = 'U')
BEGIN
TRUNCATE TABLE BOM
DROP TABLE BOM
END
GO
CREATE TABLE BOM(Parent_item varchar(10),Sub_item varchar(10))
INSERT BOM SELECT 'A' ,'AA'
UNION ALL SELECT 'A' ,'AB'
UNION ALL SELECT 'AA' ,'AAA'
UNION ALL SELECT 'AA' ,'AAB'
UNION ALL SELECT 'AB','ABCC'
UNION ALL SELECT 'C','SA'
UNION ALL SELECT 'C','SG'
UNION ALL SELECT 'SA','DGDFA'
UNION ALL SELECT 'AAA','BADFSD'
GO
SET NOCOUNT ON
DECLARE @t TABLE(Parent_item varchar(10),Level int,Path varchar(8000))
DECLARE @l int
SET @l=0
INSERT @t SELECT DISTINCT Parent_item,@l,RIGHT(SPACE(20)+Parent_item,20)
FROM BOM a
WHERE NOT EXISTS(
SELECT * FROM BOM WHERE Sub_item=a.Parent_item)
WHILE @@ROWCOUNT>0
BEGIN
SET @l=@l+1
INSERT @t SELECT a.Sub_item,@l,b.Path+RIGHT(SPACE(20)+a.Sub_item,20)
FROM BOM a,@t b
WHERE a.Parent_item=b.Parent_item AND b.Level=@l-1
END
SELECT Parent_item=CASE Level WHEN 0 THEN '*'
ELSE REPLICATE('*',Level+1) END+CAST(Level+1 AS VARCHAR(10))+' '+RTRIM(Parent_item)
FROM @t
ORDER BY Path
TRUNCATE TABLE BOM
DROP TABLE BOM
SET NOCOUNT OFF
/* 结果
(所影响的行数为 9 行)
Parent_item
-------------------------------------------
*1 A
**2 AA
***3 AAA
****4 BADFSD
***3 AAB
**2 AB
***3 ABCC
*1 C
**2 SA
***3 DGDFA
**2 SG
*/
--这是我3年前写的一段SQL,供你参考 _________________ 從事企業ERP開發,學會止境,精益求精。 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|