关于BOM的查询!感觉有点难,本人菜鸟!

zxlkxy 2003-10-17 12:23:07
BOM表,要求查询出所有最下级子项的最上级父项,且一个最上级父项又几个最下级子项组成,(也就是如何把父项展开去掉中间项)如下:
ID , 父项 ,子项 ,数量
1 A0 B0 1
2 A0 C0 2
3 A0 D0 3
4 B0 B1 1
5 C0 C1 1
6 C1 C2 2
7 C2 C3 1
8 D0 D1 1
9 D0 D2 2
10 B1 B2 2
要求结果为:
1 A0 B2 2
2 A0 C3 4
3 A0 E0 3
4 A0 D1 3
5 A0 D2 6
...全文
41 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxlkxy 2003-10-19
  • 打赏
  • 举报
回复
还有更好得办法没有?
w_rose 2003-10-19
  • 打赏
  • 举报
回复
吐舌头啦!
w_rose 2003-10-18
  • 打赏
  • 举报
回复
上面程序是假设没有“循环定义”的条件下的。如果不肯定,可以在建立bom表时用触发器检查循环。另外,上面程序中的“1=1”改变一下,在循环深度达到一定数值(例如5)是就退出,那么不论有没有循环定义,程序都比较可靠。
gmlxf 2003-10-17
  • 打赏
  • 举报
回复
帮你up。
txlicenhe 2003-10-17
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2285/2285830.xml?temp=.1570551

/*--树形数据处理方案

树形数据的排序,新增,修改,复制,删除,数据完整性检查,汇总统计
--邹建 2003.9--*/
w_rose 2003-10-17
  • 打赏
  • 举报
回复
如果“查询”经常发生,要在“数据结构”上好好设计一下,每一个记录应该再增加一列“顶级父项”就可以大大加速查询速度(当然也额外要编写触发器)。
w_rose 2003-10-17
  • 打赏
  • 举报
回复
没调试,你自己根据意思修改吧!

declare @t table(ID,父项,子项,数量) /* 请定义数据类型 */
declare @p table(ID,父项,子项,数量) /* 请定义数据类型 */
insert @t(ID,父项,子项,数量) select ID,父项,子项,数量 from bom as a
where not exists(select * from bom where 子项=a.父项)
while 1=1
begin
insert @p select a.ID,a.父项,b.子项,a.数量*b.数量 as 数量
from @t as a inner join bom as b on a.子项=b.父项
if not exists(select * from @p) break

delete @t
insert @t select * from @p
delete @p
end
select * from @t /* 输出结果 */

22,206

社区成员

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

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