BOM問題,求原材料的頂層物料.
--表及測試數據如下:
--表1:bas_part(物料表)
/*
物料編碼(invid)說明:以04開頭的=成品;以03開頭的=半成品;以01開頭的=原材料
*/
IF EXISTS (SELECT * FROM sysobjects WHERE name='bas_part' AND xtype='U')
DROP TABLE bas_part
GO
CREATE TABLE bas_part(
partid NUMERIC(10,0) NOT NULL, /*自動編號*/
invid VARCHAR(50) NULL, /*存貨編碼*/
invname VARCHAR(50) NULL,
CONSTRAINT pk_bas_part PRIMARY KEY(partid)
)
GO
--表2 bom(bom表)
IF EXISTS (SELECT * FROM sysobjects WHERE name='bom' AND xtype='U')
DROP TABLE bom
GO
CREATE TABLE bom(
rkey NUMERIC(10,0) IDENTITY(1,1) NOT NULL, /*自動編號*/
ancesid NUMERIC(10,0) NULL, /*最頂層物料id*/
parentid NUMERIC(10,0) NULL, /*母件物料id*/
compid NUMERIC(10,0) NULL, /*子件物料id*/
CONSTRAINT pk_bom PRIMARY KEY(rkey)
)
GO
INSERT INTO bas_part
SELECT 1,'0401','成品1'
UNION ALL SELECT 2,'0402','成品2'
UNION ALL SELECT 3,'0301','半成品1'
UNION ALL SELECT 4,'0302','半成品2'
UNION ALL SELECT 5,'0303','半成品3'
UNION ALL SELECT 6,'0304','半成品4'
UNION ALL SELECT 7,'0305','半成品5'
UNION ALL SELECT 9,'0101','原材料1'
UNION ALL SELECT 10,'0102','原材料2'
UNION ALL SELECT 11,'0103','原材料3'
UNION ALL SELECT 12,'0104','原材料4'
INSERT INTO bom
SELECT 1,3,4
UNION ALL SELECT 1,4,5
UNION ALL SELECT 1,5,12
UNION ALL SELECT 2,2,10
UNION ALL SELECT 2,6,11
--SELECT * FROM bom
/*
形成的物料清單如下:
A)
成品1
├半成品1
├半成品2
├半成品3
├原材料4
B)
成品2
├原材料2
├半成品4
├原料3
現求:
現求原材料的最頂層的半成品或者成品。
如原材料最頂層沒有半成品,則它的成品就是最頂層,如上B中"原料2"就對應“半成品2”;
如原材料的最頂層是有半品,哪麼就是半成品,如A中,"原材料4"就對應“半成品1”,B中"原料3"就對應“半成品4”
要得到的表如下:
成品名稱 原料名稱 頂層原料
----------------------------------
成品1 原材料4 半成品1
成品2 原材料3 半成品4
成品2 原材料2 成品2
*/