日期:2014-05-17  浏览次数:20594 次

求 sql?

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