BOM展开用量计算?

appleller 2013-09-25 06:57:50
BOM展开用量计算:

BOMID,ParentId,BOMDID,CHILDID,QTY
1 A 1 B 1
1 A 2 C 2
1 A 3 D 2
1 A 4 E 3
2 B 1 F 1
2 B 2 G 8
2 B 3 H 6
3 C 1 M 2
3 C 2 N 3
...
结果:
BOMID,ParentId,CHILDID,QTY
1 A B 1
1 A C 2
1 A D 2
1 A E 3
1 A F 1
1 A G 8
1 A H 6
1 A M 2
1 A N 3
...
求SQL语句
...全文
402 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cloud_Hero 2013-09-28
  • 打赏
  • 举报
回复
楼主自己试下,用游标做一个循环吧
Andy__Huang 2013-09-25
  • 打赏
  • 举报
回复
那我不知道你们是什么设计数据库了? 按我的理解,成品A,它是由(B,C,D)组合而成,C由(E,F)组合而成,D由(G,H)组合. 那么组合成A产品的物料底是:B,E,F,G,H 第一层就是A 第二层就是B,C,D 第三层就是E,F,G,H 这样说你能够明白吗?A就是绝对的第一层,其他原料物料在哪层,计算了才知道 这种计算比较复杂,一般用存储过程完成.
appleller 2013-09-25
  • 打赏
  • 举报
回复
引用 5 楼 hdhai9451 的回复:
bom清单是一个产品组合信息,也就是生产这个产品所需要的原材料和物料. bom结构并没有这么简单,至少从你的表当中,我没看出第一项下面是否还有子项? 那用什么来标识呢? 应该有一个字段标识为子项用量,可是数量或重量. 当子项用量为空时,表明到这个节点再也没有子项.也就是需要再往下展开计算了. 这个是数据库设计的问题,理论能够说得过去,才能用sql语句表达出来
数据看来没有绝对的第一项,也没有标识,只能在数据中比较计算
Andy__Huang 2013-09-25
  • 打赏
  • 举报
回复
bom清单是一个产品组合信息,也就是生产这个产品所需要的原材料和物料. bom结构并没有这么简单,至少从你的表当中,我没看出第一项下面是否还有子项? 那用什么来标识呢? 应该有一个字段标识为子项用量,可是数量或重量. 当子项用量为空时,表明到这个节点再也没有子项.也就是需要再往下展开计算了. 这个是数据库设计的问题,理论能够说得过去,才能用sql语句表达出来
appleller 2013-09-25
  • 打赏
  • 举报
回复
引用 3 楼 hdhai9451 的回复:
create table #tb(BOMID int,ParentId varchar(10),BOMDID int,CHILDID varchar(10),QTY int)
insert into #tb
select 1,'A',1,'B',1
union all select 1,'A',2,'C',2
union all select 1,'A',3,'D',2
union all select 1,'A',4,'E',3
union all select 2,'B',1,'F',1
union all select 2,'B',2,'G',8
union all select 2,'B',3,'H',6
union all select 3,'C',1,'M',2
union all select 3,'C',2,'N',3

select parentid,childid,qty 
from #tb where bomid=1   --->bomid=1表示根结点
union all
select a.parentid,b.childid,b.qty
from (select * from #tb where bomid=1)a
inner join (select * from #tb where bomid>1)b  --->bomid>1表示子结点
	on a.childid=b.parentid
drop table #tb

/*
parentid  childid  qty 
----------------------------
A	B	1
A	C	2
A	D	2
A	E	3
A	F	1
A	G	8
A	H	6
A	M	2
A	N	3
*/
如果级别不限制,那可能还要再展开计算
多套BOM的数据,不能用bomid=1表示根结点,要怎么推算呢?
Andy__Huang 2013-09-25
  • 打赏
  • 举报
回复
create table #tb(BOMID int,ParentId varchar(10),BOMDID int,CHILDID varchar(10),QTY int)
insert into #tb
select 1,'A',1,'B',1
union all select 1,'A',2,'C',2
union all select 1,'A',3,'D',2
union all select 1,'A',4,'E',3
union all select 2,'B',1,'F',1
union all select 2,'B',2,'G',8
union all select 2,'B',3,'H',6
union all select 3,'C',1,'M',2
union all select 3,'C',2,'N',3

select parentid,childid,qty 
from #tb where bomid=1   --->bomid=1表示根结点
union all
select a.parentid,b.childid,b.qty
from (select * from #tb where bomid=1)a
inner join (select * from #tb where bomid>1)b  --->bomid>1表示子结点
	on a.childid=b.parentid
drop table #tb

/*
parentid  childid  qty 
----------------------------
A	B	1
A	C	2
A	D	2
A	E	3
A	F	1
A	G	8
A	H	6
A	M	2
A	N	3
*/
如果级别不限制,那可能还要再展开计算
appleller 2013-09-25
  • 打赏
  • 举报
回复
引用 1 楼 hdhai9451 的回复:
BOM你给的数据完整了吗?对于BOM我还是理解,但我看不出你的产品目录结构关系在哪里? 你告诉我们如果从表1经过计算得表那个结果? 建议你给出一两个产品完整的目录结构信息.
从上面的表可以看出 A --- B\C\D\E B --- F\G\G\H C --- M\N A展开到末级就是 A - B 1 A - C 2 A - D 2 A - E 3 A - F 1 A - G 8 A - H 6 A - M 2 A - N 3
Andy__Huang 2013-09-25
  • 打赏
  • 举报
回复
BOM你给的数据完整了吗?对于BOM我还是理解,但我看不出你的产品目录结构关系在哪里? 你告诉我们如果从表1经过计算得表那个结果? 建议你给出一两个产品完整的目录结构信息.

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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