小弟真诚求一条SQL语句,请各位大侠帮帮忙

莫舍桥西 2011-08-31 09:17:08
小弟分不多,真诚请教大侠们一个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字段)
效果如下:查询条件是10CA0001
Level ITEMCHILD_CD
1 30CA0001
2 70CA0001
3 011A0001
2 021A0001
1 065A0001
1 085A0001
真诚请教大侠们该怎么实现?
...全文
96 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zhen (Evan) Wang 2011-09-01
  • 打赏
  • 举报
回复
根据外键检索吧,要么建立一个视图也行,通过视图检索,呵呵
莫舍桥西 2011-09-01
  • 打赏
  • 举报
回复
用asp.net程序实现也可以,可不可以提供一个思路和代码
莫舍桥西 2011-09-01
  • 打赏
  • 举报
回复
已经解决了,思路和6楼一样,通过cte递归的方法
Jamin_Liu 2011-09-01
  • 打赏
  • 举报
回复
DECLARE @TB TABLE
(
ITEMPARENT_CD VARCHAR(8),
ITEMCHILD_CD VARCHAR(8),
BOM_SQ INT
)

INSERT INTO @TB
VALUES('10CA0001','30CA0001',1),
('10CA0001','065A0001',2),
('10CA0001','085A0001',3),
('30CA0001','70CA0001',4),
('30CA0001','021A0001',5),
('70CA0001','011A0001',6)


with ITEMCHILD
as
(
select 1 as rowid, ITEMCHILD_CD,ITEMPARENT_CD,BOM_SQ from @TB where ITEMPARENT_CD='10CA0001'
union all
select t1.rowid+1 as rowid, t2.ITEMCHILD_CD,t2.ITEMPARENT_CD,t2.BOM_SQ
from ITEMCHILD t1 join @TB t2 on t1.ITEMCHILD_CD=t2.ITEMPARENT_CD
)
select * from ITEMCHILD order by BOM_SQ
莫舍桥西 2011-08-31
  • 打赏
  • 举报
回复
谢谢大侠,我参考试试看
--小F-- 2011-08-31
  • 打赏
  • 举报
回复
CTE实现递归 没环境 参考下1楼
--小F-- 2011-08-31
  • 打赏
  • 举报
回复
USE tempdb
GO

-- 建立演示环境
CREATE TABLE Dept(
id int PRIMARY KEY,
parent_id int,
name nvarchar(20))
INSERT Dept
SELECT 0, 0, N'<全部>' UNION ALL
SELECT 1, 0, N'财务部' UNION ALL
SELECT 2, 0, N'行政部' UNION ALL
SELECT 3, 0, N'业务部' UNION ALL
SELECT 4, 0, N'业务部' UNION ALL
SELECT 5, 4, N'销售部' UNION ALL
SELECT 6, 4, N'MIS' UNION ALL
SELECT 7, 6, N'UI' UNION ALL
SELECT 8, 6, N'软件开发' UNION ALL
SELECT 9, 8, N'内部开发'
GO

-- 查询指定部门下面的所有部门
DECLARE @Dept_name nvarchar(20)
SET @Dept_name = N'MIS'
;WITH
DEPTS AS(
-- 定位点成员
SELECT * FROM Dept
WHERE name = @Dept_name
UNION ALL
-- 递归成员, 通过引用CTE自身与Dept基表JOIN实现递归
SELECT A.*
FROM Dept A, DEPTS B
WHERE A.parent_id = B.id
)
SELECT * FROM DEPTS
GO

-- 删除演示环境
DROP TABLE Dept

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧