Foxtable(狐表)用户栏目专家坐堂 → BOM数据展开,制造业的高手请进!


  共有24102人关注过本帖树形打印复制链接

主题:BOM数据展开,制造业的高手请进!

帅哥哟,离线,有人找我吗?
lxl
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/4/16 15:49:00 [只看该作者]

单级正展:select * from BOM表 where parentitem = 'B-WG-XJ-QG-12'

多级正展:
;with cte As
(
select * from BOM表 where parentitem = 'CP-WG-JSG-0210'
union all
select a.* from BOM表 a
join cte on a.parentitem  = cte.childitem
)
select  * from cte

至于原材料正展,不知道childtype 有没有表示出原材料。假设 childtype 等于 00为原材料的话:
;with cte As
(
select * from BOM表 where parentitem = 'CP-WG-JSG-0210'
union all
select a.* from BOM表 a
join cte on a.parentitem  = cte.childitem
)
select  * from cte
where childtype = '00'

 

可以用fill 方法把数据直接填充到 表里面去
tables("窗口1_table1").Fill("SQL语句","外部数据源",true)











[本帖被加为精华]
 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/4/16 15:58:00 [只看该作者]

单级反展:select * from BOM表 where childitem= 'B-WG-XJ-QG-12'
多级反展:
;with cte As
(
select * from BOM表 where childitem = 'YCL-WXJ-YZJ-0246                        '
union all
select a.* from BOM表 a
join cte on a.childitem  = cte.parentitem
)
select  * from cte


用途反展。假设childlevel = 0 表示最顶端的母件
;with cte As
(
select * from BOM表 where childitem = 'YCL-WXJ-YZJ-0246                        '
union all
select a.* from BOM表 a
join cte on a.childitem  = cte.parentitem
)
select  * from cte
where childlevel = 0




[此贴子已经被作者于2010-4-16 15:58:13编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/4/16 20:11:00 [只看该作者]

先谢了,研究下,图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/4/17 10:54:00 [只看该作者]

多级正展为什么不执行呢

;with cte As
(
select * from abt00000 where parentitem = 'CP-WG-JSG-0210'
union all
select a.* from abt00000 a
join cte on a.parentitem  = cte.childitem
)
select  * from cte
[此贴子已经被作者于2010-4-17 10:54:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/4/17 12:04:00 [只看该作者]

以下是引用唐尸三摆手在2010-4-17 10:54:00的发言:
多级正展为什么不执行呢

;with cte As
(
select * from abt00000 where parentitem = 'CP-WG-JSG-0210'
union all
select a.* from abt00000 a
join cte on a.parentitem  = cte.childitem
)
select  * from cte
[此贴子已经被作者于2010-4-17 10:54:39编辑过]

再企业管理器里面应该能执行吧。

foxtable 的执行sql窗口有一点小bug
你先执行select 1 
在弹出新的窗口里面输入上面sql


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/4/17 15:29:00 [只看该作者]

企业管理器里面能执行,用版主的方法确实能执行并显示结果,但是不知道这样的代码,如何写入到fill语句中


单级正展是没问题的:
dim al as string=Forms("frm_a").Controls("TextBox1").value
tables("frm_a_table1").Fill("select * from abt00000 where parentitem ='" & al & "'","erp",true)

将语句换成下面的代码
;with cte As
(
select * from abt00000 where parentitem = 'CP-WG-JSG-0210'
union all
select a.* from abt00000 a
join cte on a.parentitem  = cte.childitem
)
select  * from cte

就提示报错

图片点击可在新窗口打开查看此主题相关图片如下:pic087.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2010-4-17 15:35:28编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/4/17 16:25:00 [只看该作者]

字符串不能直接换行。可以把的回车符删掉,让sql全部放到一行

或者
dim al as string=Forms("frm_a").Controls("TextBox1").value
Dim s As String =  " ;with cte As "  & _
                           "(select * from abt00000 where parentitem = '"  & al  & "'  "  & _
                           "union all  "  & _
                           "select a.* from abt00000 a  "  & _
                           "join cte on a.parentitem  = cte.childitem) "  & _
                           "select  * from cte " 
tables("frm_a_table1").Fill(s,"erp",true)


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/4/17 16:39:00 [只看该作者]

呵呵,深受启发,终于显示结果了,不过还有两个问题
第一,childtype并没有指定出原材料,所以原料正展存在一点小问题
第二,顶层BOM按理说childlevel 应该是0,但是在此BOM表中并没有体现出来

 回到顶部
帅哥哟,离线,有人找我吗?
lxl
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:858 积分:6071 威望:0 精华:19 注册:2008/9/1 9:13:00
  发帖心情 Post By:2010/4/17 17:13:00 [只看该作者]

以下是引用唐尸三摆手在2010-4-17 16:39:00的发言:
呵呵,深受启发,终于显示结果了,不过还有两个问题
第一,childtype并没有指定出原材料,所以原料正展存在一点小问题
第二,顶层BOM按理说childlevel 应该是0,但是在此BOM表中并没有体现出来

第一个问题 只能通过它是否还有下级来判断是否是原材料了。
原材料正展:
;with cte As
(
select * from abt00000  where parentitem = 'CP-WG-JSG-0210'
union all
select a.* from abt00000  a
join cte on a.parentitem  = cte.childitem
)
select  cte.* from cte
   --查询得到所有下级物料,再和BOM 表做一次联接,筛选出这些物料中没有下级的记录,即为原材料
left join abt00000 b on cte.childitem = b.parentitem 
where b.parentitem is null


第二个顶层BOM你看看它的parentitem字段是什么? 是'' 还是null
可以通过parentitem的值来把顶层的物料筛选出来。


 回到顶部
帅哥哟,离线,有人找我吗?
唐尸三摆手
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:928 积分:7769 威望:0 精华:13 注册:2008/9/1 11:58:00
  发帖心情 Post By:2010/4/18 7:46:00 [只看该作者]

是的,正如版主所预料的,顶层的BOM中也可以判断parentitem is null,如此说来,这两项正好是相反的效果


 回到顶部
总数 40 上一页 1 2 3 4 下一页