求教:类似ERP 多阶BOM成本从下往上滚算的语句

风寒晓 2013-01-30 01:53:46
某产品 BOM结构如下:
阶次 品号 品号属性 成本
.1 A 采购件 10.0
.1 B 自制件 0
..2 B1 采购件 1.0
..2 B2 自制件 2.0
...3 B21 采购件 3.0

现在想直接通过SQL查询语句直接查询 品号B的成本,求大神指点。
B=B1+B2+B21+...,逻辑关系可以是 "当下阶right(阶次,1) >当前right(阶次,1)"时滚算。
...全文
342 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
haitao 2013-01-31
  • 打赏
  • 举报
回复
引用 14 楼 leo2003 的回复:
select sum(成本) 部件成本 from [temp] where 序号>@r and 序号<=@e 如果是 sum 序号 段,我估计以后他会遇到很多麻烦的,
应该是顺序字段,需要维护的,不是id字段
健者天行 2013-01-31
  • 打赏
  • 举报
回复
select sum(成本) 部件成本 from [temp] where 序号>@r and 序号<=@e 如果是 sum 序号 段,我估计以后他会遇到很多麻烦的,
老易 2013-01-31
  • 打赏
  • 举报
回复
如果是sql server 2005以上版本,可以考虑使用with as递归调用
haitao 2013-01-31
  • 打赏
  • 举报
回复
引用 9 楼 leo2003 的回复:
不如,再加多一列 : ParentID , 这样计算起来方便、清楚多了。
这种父子关系,想取得所有子孙,需要递归,还不如现在的 顺序+层次 的方式 7楼的sql比递归要高效多了 这一行也要改为 select @e=min(序号)-1 from tb
健者天行 2013-01-31
  • 打赏
  • 举报
回复
“柔性ERP系统” ? 还真不知道这个柔性是什么意思?
mouphy123 2013-01-31
  • 打赏
  • 举报
回复
ERP传统的理论算法,会把问题复杂化,若对物料清单进行柔性化处理或称柔性ERP系统应该是方向。
健者天行 2013-01-31
  • 打赏
  • 举报
回复
不如,再加多一列 : ParentID , 这样计算起来方便、清楚多了。
haitao 2013-01-30
  • 打赏
  • 举报
回复
这一行改为: if @e is null select @e=max(序号) from tb
haitao 2013-01-30
  • 打赏
  • 举报
回复
declare @r int,@e int
set @r=1 --要计算的部件的序号
select @e=min(序号) from tb
where 序号>@r and len(阶层)<=(select 阶层 from tb where 序号=@r)

if @r is null select @r=max(序号) from tb

select sum(成本) 部件成本 from tb
where 序号>@r and 序号<=@e
风寒晓 2013-01-30
  • 打赏
  • 举报
回复
哦,明白了,好比 程序控件的 行顺序。 那假如例子改成如下: 序号 阶层 品号 属性 成本 0 .1 A 采购件 10.0 1 .1 B 自制件 0 2 ..2 B1 采购件 1.0 3 ..2 B2 自制件 2.0 4 ...3 B21 采购件 3.0 5 ..2 B3 采购件 1.0 6 ...3 B31 自制件 2.0 7 ...3 B32 采购件 3.0
haitao 2013-01-30
  • 打赏
  • 举报
回复
程序的FOR循环遍历,就表示一种顺序了 而关系数据库的顺序是靠order by确定的 你看我的例子,order by什么,才能让b31在b3而不是b2后面?(如果编号不是正巧的话)
风寒晓 2013-01-30
  • 打赏
  • 举报
回复
汗,还是没明白,我感觉我觉得这个例子很典型了。 如果是程序,可以直接用FOR循环遍历数据,行序号等于行序号时跳出循环,行序号大于行序号时++。 SQL 直接查询就不知道咋处理了。 我现在是很笨的办法,直接用表函数将成本计算出来,然后再去关联。
haitao 2013-01-30
  • 打赏
  • 举报
回复
阶次是层次 你的例子太少,所以不过典型,扩展如下就知道了: .1 A 采购件 10.0 .1 B 自制件 0 ..2 B1 采购件 1.0 ..2 B2 自制件 2.0 ...3 B21 采购件 3.0 ..2 B3 采购件 1.0 ...3 B31 自制件 2.0 ...3 B32 采购件 3.0
风寒晓 2013-01-30
  • 打赏
  • 举报
回复
阶次 就是序号啊!还要那些序号?
haitao 2013-01-30
  • 打赏
  • 举报
回复
这种树形存储格式,序号非常关键,你没提供此字段。。。。

22,207

社区成员

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

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