34,595
社区成员
发帖
与我相关
我的任务
分享
ITEM_CODE
99-88551-01030
98-78496-SP417K
......
PARENT(成品) ITEM_CODE(半成品或物料) BOM_UNIT
99-88551-01030 97-88551-01030 PCS ----此为最高层
97-88551-01030 96-88551-01010 PCS
96-88551-01010 #8003042-01010 G
96-88551-01010 #6300035-01010 G
96-88551-01010 20-88551-01030 PCS
20-88551-01030 21-00001-00010 G
20-88551-01030 22-00424-01010 G
98485-00001 97485-00001 PCS ----此为最高层
97485-00001 90485-00001 PCS
90485-00001 #8000-01010 G
90485-00001 20485-00001 PCS
20485-00001 21485-00001 PCS
20485-00001 22485-00001 G
98-78496-SP417K #98-78496-SP417K G ----此为最高层
98-78496-SP417K 97-78496-SP417K PCS
97-78496-SP417K 96-78496-SP2027 PCS
97-78496-SP417K #7678496-00010 G
97-78496-SP417K #88-78496-SP2027 G
96-78496-SP2027 94-78496-SP2027 PCS
96-78496-SP2027 #87-78496-SP2027 G
94-78496-SP2027 90-78496-01010 PCS
90-78496-01010 87-02029-00020 G
90-78496-01010 02-00002-01011 G
99-88551-01030 --99-88551-01030 下面的所有物料
97-88551-01030
97-88551-01030
96-88551-01010
96-88551-01010
#8003042-01010
96-88551-01010
#6300035-01010
96-88551-01010
20-88551-01030
20-88551-01030
21-00001-00010
20-88551-01030
22-00424-01010
20-88551-01030
98-78496-SP417K --98-78496-SP417K 下面的所有物料
#98-78496-SP417K
98-78496-SP417K
97-78496-SP417K
97-78496-SP417K
96-78496-SP2027
97-78496-SP417K
#7678496-00010
97-78496-SP417K
#88-78496-SP2027
96-78496-SP2027
94-78496-SP2027
96-78496-SP2027
#87-78496-SP2027
94-78496-SP2027
90-78496-01010
90-78496-01010
87-02029-00020
90-78496-01010
02-00002-01011
IF OBJECT_ID('BOM1') IS NOT NULL
DROP TABLE BOM1
create table BOM1(PARENT varchar(50),ITEM_CODE varchar(50),BOM_UNIT varchar(50))
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('99-88551-01030','97-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-88551-01030','96-88551-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#8003042-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#6300035-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','20-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','21-00001-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','22-00424-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','#98-78496-SP417K','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','97-78496-SP417K','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','96-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#7678496-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#88-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','94-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','#87-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('94-78496-SP2027','90-78496-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','87-02029-00020','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','02-00002-01011','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98485-00001','97485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97485-00001','90485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','#8000-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','20485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','21485-00001','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','22485-00001','G')
GO
DECLARE @lev INT
SET @lev=0
IF OBJECT_ID('Tempdb..#B') IS NOT NULL
DROP TABLE #B
SELECT ID=identity(int,1,1), a.PARENT,a.ITEM_CODE,Product=PARENT,lev=0
INTO #B
FROM BOM1 AS a
WHERE NOT EXISTS(SELECT 1 FROM BOM1 WHERE ITEM_CODE=a.PARENT )
AND EXISTS(SELECT 1 FROM tb1 WHERE ITEM_CODE=a.PARENT)
WHILE @@rowcount>0
BEGIN
SET @lev=@lev+1
INSERT INTO #B
SELECT
a.PARENT,a.ITEM_CODE,Product=b.Product,lev=b.lev+1
FROM BOM1 AS a
INNER JOIN #B AS b on b.ITEM_CODE=a.PARENT AND b.lev=@lev-1
END
SELECT PARENT,Product
FROM
(
SELECT ID,PARENT,Product,lev,1 AS ord
FROM #B
UNION ALL
SELECT ID,ITEM_CODE,Product,lev,2 AS ord
FROM #B
)t
ORDER BY Product,ID,ord
/*
PARENT Product
98485-00001 98485-00001
97485-00001 98485-00001
97485-00001 98485-00001
90485-00001 98485-00001
90485-00001 98485-00001
#8000-01010 98485-00001
90485-00001 98485-00001
20485-00001 98485-00001
20485-00001 98485-00001
21485-00001 98485-00001
20485-00001 98485-00001
22485-00001 98485-00001
98-78496-SP417K 98-78496-SP417K
#98-78496-SP417K 98-78496-SP417K
98-78496-SP417K 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
96-78496-SP2027 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
#7678496-00010 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
#88-78496-SP2027 98-78496-SP417K
96-78496-SP2027 98-78496-SP417K
94-78496-SP2027 98-78496-SP417K
96-78496-SP2027 98-78496-SP417K
#87-78496-SP2027 98-78496-SP417K
94-78496-SP2027 98-78496-SP417K
90-78496-01010 98-78496-SP417K
90-78496-01010 98-78496-SP417K
87-02029-00020 98-78496-SP417K
90-78496-01010 98-78496-SP417K
02-00002-01011 98-78496-SP417K
99-88551-01030 99-88551-01030
97-88551-01030 99-88551-01030
97-88551-01030 99-88551-01030
96-88551-01010 99-88551-01030
96-88551-01010 99-88551-01030
#8003042-01010 99-88551-01030
96-88551-01010 99-88551-01030
#6300035-01010 99-88551-01030
96-88551-01010 99-88551-01030
20-88551-01030 99-88551-01030
20-88551-01030 99-88551-01030
21-00001-00010 99-88551-01030
20-88551-01030 99-88551-01030
22-00424-01010 99-88551-01030
*/
create table BOM1(PARENT varchar(50),ITEM_CODE varchar(50),BOM_UNIT varchar(50))
set nocount on
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('99-88551-01030','97-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-88551-01030','96-88551-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#8003042-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#6300035-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','20-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','21-00001-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','22-00424-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','#98-78496-SP417K','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','97-78496-SP417K','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','96-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#7678496-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#88-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','94-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','#87-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('94-78496-SP2027','90-78496-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','87-02029-00020','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','02-00002-01011','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98485-00001','97485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97485-00001','90485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','#8000-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','20485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','21485-00001','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','22485-00001','G')
go
create table tb1(ITEM_CODE varchar(50))
insert into tb1 values('99-88551-01030')
insert into tb1 values('98-78496-SP417K')
set nocount off
go
DECLARE @lev INT
SET @lev=0
IF OBJECT_ID('Tempdb..#B') IS NOT NULL
DROP TABLE #B
SELECT t.*,lev=0,t.PARENT AS PG INTO #B FROM BOM1 t join tb1 e on t.PARENT = e.ITEM_CODE
WHILE @@rowcount>0
BEGIN
SET @lev=@lev+1
INSERT INTO #B
SELECT a.*,
lev=b.lev+1,b.PG FROM BOM1 AS a
INNER JOIN #B AS b on b.ITEM_CODE=a.PARENT AND b.lev=@lev-1
END
SELECT PARENT,PG FROM #B
UNION ALL
SELECT ITEM_CODE,PG as fg FROM #B t where not exists (select 1 from #B where PARENT=t.ITEM_CODE)
ORDER BY PG,PARENT
drop table tb1,bom1,#B
/*************
PARENT PG
-------------------------------------------------- --------------------------------------------------
#7678496-00010 98-78496-SP417K
#87-78496-SP2027 98-78496-SP417K
#88-78496-SP2027 98-78496-SP417K
#98-78496-SP417K 98-78496-SP417K
02-00002-01011 98-78496-SP417K
87-02029-00020 98-78496-SP417K
90-78496-01010 98-78496-SP417K
90-78496-01010 98-78496-SP417K
94-78496-SP2027 98-78496-SP417K
96-78496-SP2027 98-78496-SP417K
96-78496-SP2027 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
98-78496-SP417K 98-78496-SP417K
98-78496-SP417K 98-78496-SP417K
#6300035-01010 99-88551-01030
#8003042-01010 99-88551-01030
20-88551-01030 99-88551-01030
20-88551-01030 99-88551-01030
21-00001-00010 99-88551-01030
22-00424-01010 99-88551-01030
96-88551-01010 99-88551-01030
96-88551-01010 99-88551-01030
96-88551-01010 99-88551-01030
97-88551-01030 99-88551-01030
99-88551-01030 99-88551-01030
(27 行受影响)
IF OBJECT_ID('BOM1') IS NOT NULL
DROP TABLE BOM1
create table BOM1(PARENT varchar(50),ITEM_CODE varchar(50),BOM_UNIT varchar(50))
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('99-88551-01030','97-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-88551-01030','96-88551-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#8003042-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#6300035-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','20-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','21-00001-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','22-00424-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','#98-78496-SP417K','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','97-78496-SP417K','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','96-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#7678496-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#88-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','94-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','#87-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('94-78496-SP2027','90-78496-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','87-02029-00020','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','02-00002-01011','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98485-00001','97485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97485-00001','90485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','#8000-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','20485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','21485-00001','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','22485-00001','G')
GO
DECLARE @lev INT
SET @lev=0
IF OBJECT_ID('Tempdb..#B') IS NOT NULL
DROP TABLE #B
SELECT ID=identity(int,1,1), a.PARENT,a.ITEM_CODE,Product=PARENT,lev=0
INTO #B
FROM BOM1 AS a WHERE NOT EXISTS(SELECT 1 FROM BOM1 WHERE ITEM_CODE=a.PARENT )
WHILE @@rowcount>0
BEGIN
SET @lev=@lev+1
INSERT INTO #B
SELECT
a.PARENT,a.ITEM_CODE,Product=b.Product,lev=b.lev+1
FROM BOM1 AS a
INNER JOIN #B AS b on b.ITEM_CODE=a.PARENT AND b.lev=@lev-1
END
SELECT PARENT,Product
FROM
(
SELECT ID,PARENT,Product,lev,1 AS ord
FROM #B
UNION ALL
SELECT ID,ITEM_CODE,Product,lev,2 AS ord
FROM #B
)t
ORDER BY Product,ID,ord
/*
PARENT Product
98485-00001 98485-00001
97485-00001 98485-00001
97485-00001 98485-00001
90485-00001 98485-00001
90485-00001 98485-00001
#8000-01010 98485-00001
90485-00001 98485-00001
20485-00001 98485-00001
20485-00001 98485-00001
21485-00001 98485-00001
20485-00001 98485-00001
22485-00001 98485-00001
98-78496-SP417K 98-78496-SP417K
#98-78496-SP417K 98-78496-SP417K
98-78496-SP417K 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
96-78496-SP2027 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
#7678496-00010 98-78496-SP417K
97-78496-SP417K 98-78496-SP417K
#88-78496-SP2027 98-78496-SP417K
96-78496-SP2027 98-78496-SP417K
94-78496-SP2027 98-78496-SP417K
96-78496-SP2027 98-78496-SP417K
#87-78496-SP2027 98-78496-SP417K
94-78496-SP2027 98-78496-SP417K
90-78496-01010 98-78496-SP417K
90-78496-01010 98-78496-SP417K
87-02029-00020 98-78496-SP417K
90-78496-01010 98-78496-SP417K
02-00002-01011 98-78496-SP417K
99-88551-01030 99-88551-01030
97-88551-01030 99-88551-01030
97-88551-01030 99-88551-01030
96-88551-01010 99-88551-01030
96-88551-01010 99-88551-01030
#8003042-01010 99-88551-01030
96-88551-01010 99-88551-01030
#6300035-01010 99-88551-01030
96-88551-01010 99-88551-01030
20-88551-01030 99-88551-01030
20-88551-01030 99-88551-01030
21-00001-00010 99-88551-01030
20-88551-01030 99-88551-01030
22-00424-01010 99-88551-01030
*/
--貌似上边有漏掉的,这个呢?
create table BOM1(PARENT varchar(50),ITEM_CODE varchar(50),BOM_UNIT varchar(50))
set nocount on
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('99-88551-01030','97-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-88551-01030','96-88551-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#8003042-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#6300035-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','20-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','21-00001-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','22-00424-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','#98-78496-SP417K','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','97-78496-SP417K','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','96-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#7678496-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#88-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','94-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','#87-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('94-78496-SP2027','90-78496-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','87-02029-00020','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','02-00002-01011','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98485-00001','97485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97485-00001','90485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','#8000-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','20485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','21485-00001','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','22485-00001','G')
set nocount off
go
DECLARE @PARENT NVARCHAR(50)
SET @PARENT='98-78496-SP417K'
DECLARE @lev INT
SET @lev=0
IF OBJECT_ID('Tempdb..#B') IS NOT NULL
DROP TABLE #B
SELECT *,lev=0,PARENT AS PG INTO #B FROM BOM1 t WHERE not exists (select 1 from BOM1 where ITEM_CODE = t.PARENT)
WHILE @@rowcount>0
BEGIN
SET @lev=@lev+1
INSERT INTO #B
SELECT a.*,
lev=b.lev+1,b.PG FROM BOM1 AS a
INNER JOIN #B AS b on b.ITEM_CODE=a.PARENT AND b.lev=@lev-1
END
SELECT PARENT,lev,PG,0 as fg FROM #B
UNION ALL
SELECT ITEM_CODE,lev,PG,1 as fg FROM #B t where not exists (select 1 from #B where PARENT=t.ITEM_CODE)
ORDER BY PG,lev,fg
drop table bom1,#B
/*******************
PARENT lev PG fg
-------------------------------------------------- ----------- -------------------------------------------------- -----------
98485-00001 0 98485-00001 0
97485-00001 1 98485-00001 0
90485-00001 2 98485-00001 0
90485-00001 2 98485-00001 0
#8000-01010 2 98485-00001 1
20485-00001 3 98485-00001 0
20485-00001 3 98485-00001 0
21485-00001 3 98485-00001 1
22485-00001 3 98485-00001 1
98-78496-SP417K 0 98-78496-SP417K 0
98-78496-SP417K 0 98-78496-SP417K 0
#98-78496-SP417K 0 98-78496-SP417K 1
97-78496-SP417K 1 98-78496-SP417K 0
97-78496-SP417K 1 98-78496-SP417K 0
97-78496-SP417K 1 98-78496-SP417K 0
#7678496-00010 1 98-78496-SP417K 1
#88-78496-SP2027 1 98-78496-SP417K 1
96-78496-SP2027 2 98-78496-SP417K 0
96-78496-SP2027 2 98-78496-SP417K 0
#87-78496-SP2027 2 98-78496-SP417K 1
94-78496-SP2027 3 98-78496-SP417K 0
90-78496-01010 4 98-78496-SP417K 0
90-78496-01010 4 98-78496-SP417K 0
87-02029-00020 4 98-78496-SP417K 1
02-00002-01011 4 98-78496-SP417K 1
99-88551-01030 0 99-88551-01030 0
97-88551-01030 1 99-88551-01030 0
96-88551-01010 2 99-88551-01030 0
96-88551-01010 2 99-88551-01030 0
96-88551-01010 2 99-88551-01030 0
#8003042-01010 2 99-88551-01030 1
#6300035-01010 2 99-88551-01030 1
20-88551-01030 3 99-88551-01030 0
20-88551-01030 3 99-88551-01030 0
21-00001-00010 3 99-88551-01030 1
22-00424-01010 3 99-88551-01030 1
(36 行受影响)
create table BOM1(PARENT varchar(50),ITEM_CODE varchar(50),BOM_UNIT varchar(50))
set nocount on
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('99-88551-01030','97-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-88551-01030','96-88551-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#8003042-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#6300035-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','20-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','21-00001-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','22-00424-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','#98-78496-SP417K','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','97-78496-SP417K','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','96-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#7678496-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#88-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','94-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','#87-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('94-78496-SP2027','90-78496-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','87-02029-00020','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','02-00002-01011','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98485-00001','97485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97485-00001','90485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','#8000-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','20485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','21485-00001','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','22485-00001','G')
set nocount off
go
DECLARE @PARENT NVARCHAR(50)
SET @PARENT='98-78496-SP417K'
DECLARE @lev INT
SET @lev=0
IF OBJECT_ID('Tempdb..#B') IS NOT NULL
DROP TABLE #B
SELECT *,lev=0 INTO #B FROM BOM1 t WHERE not exists (select 1 from BOM1 where ITEM_CODE = t.PARENT)
WHILE @@rowcount>0
BEGIN
SET @lev=@lev+1
INSERT INTO #B
SELECT a.*,
lev=b.lev+1 FROM BOM1 AS a
INNER JOIN #B AS b on b.ITEM_CODE=a.PARENT AND b.lev=@lev-1
END
SELECT PARENT,ITEM_CODE,BOM_UNIT FROM #B ORDER BY lev
drop table bom1,#B
/*****************
PARENT ITEM_CODE BOM_UNIT
-------------------------------------------------- -------------------------------------------------- --------------------------------------------------
99-88551-01030 97-88551-01030 PCS
98-78496-SP417K #98-78496-SP417K G
98-78496-SP417K 97-78496-SP417K PCS
98485-00001 97485-00001 PCS
97485-00001 90485-00001 PCS
97-78496-SP417K 96-78496-SP2027 PCS
97-78496-SP417K #7678496-00010 G
97-78496-SP417K #88-78496-SP2027 G
97-88551-01030 96-88551-01010 PCS
90485-00001 #8000-01010 PCS
90485-00001 20485-00001 PCS
96-78496-SP2027 94-78496-SP2027 PCS
96-78496-SP2027 #87-78496-SP2027 G
96-88551-01010 #8003042-01010 G
96-88551-01010 #6300035-01010 G
96-88551-01010 20-88551-01030 PCS
20485-00001 21485-00001 G
20485-00001 22485-00001 G
20-88551-01030 21-00001-00010 G
20-88551-01030 22-00424-01010 G
94-78496-SP2027 90-78496-01010 PCS
90-78496-01010 87-02029-00020 G
90-78496-01010 02-00002-01011 G
(23 行受影响)
create table BOM1(PARENT varchar(50),ITEM_CODE varchar(50),BOM_UNIT varchar(50))
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('99-88551-01030','97-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-88551-01030','96-88551-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#8003042-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','#6300035-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-88551-01010','20-88551-01030','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','21-00001-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20-88551-01030','22-00424-01010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','#98-78496-SP417K','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98-78496-SP417K','97-78496-SP417K','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','96-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#7678496-00010','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97-78496-SP417K','#88-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','94-78496-SP2027','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('96-78496-SP2027','#87-78496-SP2027','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('94-78496-SP2027','90-78496-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','87-02029-00020','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90-78496-01010','02-00002-01011','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('98485-00001','97485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('97485-00001','90485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','#8000-01010','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('90485-00001','20485-00001','PCS')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','21485-00001','G')
insert into BOM1(PARENT,ITEM_CODE,BOM_UNIT)
values('20485-00001','22485-00001','G')