请教一个关于产品子结构的SQL语句

yumanqing 2011-12-13 09:33:10
有一个这样的产品结构:
支架1 由 材料1 + 材料2 组成
支架2 由 材料1 + 材料3 组成
支架3 由 支架1+材料4 组成
这样的一个产品结构,类似BOM,
建表SQL如下:

CREATE TABLE [dbo].[boms] (
piID varchar(20), --父ID
picID varchar(20) --子ID
)
GO

insert into boms(piID,picID) values('001','0011')
insert into boms(piID,picID) values('001','0012')
insert into boms(piID,picID) values('0012','0013')
insert into boms(piID,picID) values('0012','0014')
insert into boms(piID,picID) values('0013','00133')
insert into boms(piID,picID) values('0013','00134')
insert into boms(piID,picID) values('00133','001331')
insert into boms(piID,picID) values('00133','001332')
go

--通过以下函数可以实现查询下级的编码:
create function f_getP(@piID varchar(20))
returns @re table(picID varchar(20),lev int,piID varchar(20),TFlag varchar(10))
as
begin
declare @l int
set @l=0
insert @re select picID,@l,piID,'本级ID' from [boms] where piID = @piID
while @@rowcount>0
begin
set @l=@l+1
insert @re select a.picID,@l,a.piID,'下级ID'
from [boms] a,@re b
where a.piID=b.picID and b.lev=@l-1 and a.picID is not null
end
update @re set lev=@l-lev
return
end
go

declare @piID varchar(10)
set @piID = '001'

select * from dbo.f_getP(@piID)





==
现在的问题是,表中增加了一个数量字段,
支架1 由 2个材料1 + 3个材料2 组成
支架2 由 3个材料1 + 5个材料3 组成
支架3 由 4个支架1+1个材料4 组成

假如现在需要5个支架3,则计算需要:
5×4个支架1
5×1个材料4
--
5×4×2个材料1
5×4×3个材料2

想要这样的结果,函数该如何修改一下呢?谢谢
...全文
120 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yumanqing 2011-12-16
  • 打赏
  • 举报
回复
谢谢各位,各位大哥给点建议啊
yumanqing 2011-12-13
  • 打赏
  • 举报
回复
感谢dawugui

(爱新觉罗.毓华)
,程序代码是能写出来,递归循环,但觉得有些复杂,如果能借助数据库方便的统计出来,我想可能简单一些
--小F-- 2011-12-13
  • 打赏
  • 举报
回复
感觉是一个BOM路径的问题
dawugui 2011-12-13
  • 打赏
  • 举报
回复
我感觉你这个需要用程序来做.
第一步先求出支架3的情况,然后判断支架3中是否存在支架1或支架2
第二步再求出支架1或支架2的情况...
如此循环...知道求出的内容中不含有支架1.2.3...或者说求出的内容中在支架那个字段中不存在才结束.
yumanqing 2011-12-13
  • 打赏
  • 举报
回复
那该如何改呢,谢谢,在线等
Ny-6000 2011-12-13
  • 打赏
  • 举报
回复
改动的大了,

二维和三维的区别,不仅仅是一点点哦.

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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