日期:2014-05-17 浏览次数:20612 次
IF EXISTS ( SELECT 1
FROM tempdb.sys.sysobjects
WHERE name LIKE '#TMP_ITM%'
AND xtype = 'U' )
DROP TABLE #TMP_ITM
GO
CREATE TABLE #TMP_ITM
(
MOTHER_ITEM_CD NVARCHAR(20) NOT NULL
,CHIDL_ITM_CD NVARCHAR(20) NOT NULL
,QTY DECIMAL(17, 4) NULL
)
INSERT INTO #TMP_ITM(MOTHER_ITEM_CD,CHIDL_ITM_CD,QTY )VALUES ('000001','00002',10.0000 );
INSERT INTO #TMP_ITM(MOTHER_ITEM_CD,CHIDL_ITM_CD,QTY )VALUES ('000001','1012-10',20.0000 );
INSERT INTO #TMP_ITM(MOTHER_ITEM_CD,CHIDL_ITM_CD,QTY )VALUES ('1012-10','002',50.0000 );
INSERT INTO #TMP_ITM(MOTHER_ITEM_CD,CHIDL_ITM_CD,QTY )VALUES ('1012-10','1055-10',70.0000 );
INSERT INTO #TMP_ITM(MOTHER_ITEM_CD,CHIDL_ITM_CD,QTY )VALUES ('1055-10','LJKJL',100.0000 );
SELECT * FROM #TMP_ITM
/*
母ID 子ID 数量
MOTHER_ITEM_CD CHIDL_ITM_CD QTY
000001 00002 10.0000
000001 1012-10 20.0000
1012-10 002 50.0000
1012-10 1055-10 70.0000
1055-10 LJKJL 100.0000
*/
/*
说明:
1。根据 MOTHER_ITEM_CD 插入 一条。。如,下面的 SEQ 等于 0,6,10 ITEM_CD 和 CHIDL_ITM_CD 都是 MOTHER_ITEM_CD。LV = 0 ,QTY 是 1.0000
2。然后 以 CHIDL_ITM_CD 为键 搜索 #TMP_ITM 表的 MOTHER_ITEM_CD,如 以 CHIDL_ITM_CD = 00002 来 搜索 MOTHER_ITEM_CD为 00002,
不存在==〉 插入 像 seq 等于 1 LV 是= 1 ,QTY 是 10.0000
如果存在==〉如 CHIDL_ITM_CD = 1012-10,CHIDL_ITM_CD = 1012-10 来 搜索 MOTHER_ITEM_CD为 1012-10 的 所有数据 依次 循环,
这里 有两条
1012-10 002 50.0000
1012-10 1055-10 70.0000(1055-10是1012-10的子ID,所以层次是 2, 1055-10 因为 存在 所以又搜索。。)
*/
/*
想要的结果
顺序 层次 数量
SEQ ITEM_CD CHIDL_ITM_CD LV QTY
0 000001 000001 0 1.0000
1 000001 00002 1 10.0000
2 000001 1012-10 1 20.0000
3 000001 002 2 50.0000
4 000001 1055-10 2 70.0000
5 000001 LJKJL 3 100.0000
6 1012-10 1012-10 0 1.0000
7 1012-10 002 1 50.0000
8 1012-10 1055-10 1 70.0000
9 1012-10 LJKJL 2 100.0000
10 1055-10 1055-10 0 1.0000
11 1055-10 LJKJL 1 100.0000
*/
DECLARE @tb TABLE
(
MOTHER_ITEM_CD VARCHAR(20) NOT NULL ,
CHIDL_ITM_CD VARCHAR(20) NOT NULL ,
qty DECIMAL(17, 4) NOT NULL ,
lvl INT NOT NULL
&n