小弟分不多,真诚请教大侠们一个SQL问题,希望大侠们不吝赐教,小弟在此不甚感激。有一张表记录物料 如下:(10C是父物料,30C是10C的子物料【30C本身也是父物料】70C是30C的子物料【70C本身也是父物料】)ITEMPARENT_CD ITEMCHILD_CD BOM_SQ ……ITEMPARENT_CD是主键 10CA0001 30CA0001 1 10CA0001 065A0001 2 10CA0001 085A0001 3 30CA0001 70CA0001 4 30CA0001 021A0001 5 70CA0001 011A0001 6现在要一条sql语句根据10C查询出所有他的子物料(同时加上一个等级Level字段)效果如下:查询条件是10CA0001Level ITEMCHILD_CD 1 30CA0001 2 70CA0001 3 011A0001 2 021A0001 1 065A0001 1 085A0001真诚请教大侠们该怎么实现?
12 回答
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
不理解你的意思, 你是已经有表结构,只需一条sql语句. 还是说需要帮助你怎么设计.
如果你已经有表结构, 请把你建表的语句,以及测试数据编写好,这样有助于大家的理解,以便更好的帮助你.
但如果你是需要别人怎么帮你设计. 请把你的需求说明细点吧, 我还是没理解你的意思.
DIEA
TA贡献1820条经验 获得超2个赞
建一个表T_Wuliao,表结构和数据如下:
Level ITEMCHILD_CD
1 30CA0001
2 70CA0001
3 011A0001
2 021A0001
1 065A0001
1 085A0001
然后select * from T_Wuliao,结果100%就是你想要的。
赶紧给分。。。
小怪兽爱吃肉
是这个意思吗?
TA贡献1852条经验 获得超1个赞
USE TEMPDB
GO
CREATE TABLE #TEMP
(
ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
PARENTID INT
)
INSERT INTO #TEMP
VALUES(0),(1),(2),(3),(3),(2),(3),(2),(3),(2)
;WITH T AS
(
SELECT 1 AS [Level],* FROM #TEMP WHERE ID=3
UNION ALL
SELECT CASE WHEN T.ID=T.PARENTID THEN T.Level ELSE T.Level+1 END AS [Level],A.* FROM #TEMP AS A INNER JOIN T ON A.PARENTID=T.ID
)
SELECT * FROM T
- 12 回答
- 0 关注
- 533 浏览
添加回答
举报
0/150
提交
取消