设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1595|回复: 3
打印 上一主题 下一主题

[查询] 搞不懂,看了几个都不懂。求帮忙。

[复制链接]
跳转到指定楼层
1#
发表于 2018-6-22 19:36:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

Bom吧。想查询打印个3层左右的全阶。

最笨的是一层一层弄3个层表关系串起来,再把3个层表摆弄到一张表里。是不是要6个追加查询才能解决啊?有简单的啊?

有人说树形的,或者,反正看了几个搞不起来,别人的BOM都觉得太复杂了。

请大神看附件啊,先谢谢!



或者需要添加个子件的序号。
拜托,拜托!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2018-9-27 14:56:21 | 只看该作者
层级展开需要写递归算法的。具体可以参考下:
http://www.office-cn.net/thread-66634-1-1.html
主界面里有一个生成树结构的函数。
  1. Public Sub SubTree(rs As DAO.Recordset, key As String)
  2. '本过程添加一些子节点
  3. '参数:rs是ADO记录集,key是节点的关键字

  4.     Dim Book As Variant
  5.     '遍历所有的记录,如果关键字相同,则添加子节点
  6.     rs.MoveFirst
  7.     Do Until rs.EOF
  8.         If "R" & rs(1) = key Then
  9.             '如果没有为该节点指定图标,则用一个文件夹图标
  10.             Set nod = Tree.Nodes.Add(key, tvwChild, "R" & rs(0), rs(2), Nz(Trim(rs(3)), "folder"))
  11.             '记录下当前的记录指针
  12.             Book = rs.Bookmark
  13.             '递归调用过程生成子节点
  14.             SubTree rs, "R" & rs(0)
  15.             '恢复记录指针
  16.             rs.Bookmark = Book
  17.         End If
  18.         rs.MoveNext
  19.     Loop

  20. End Sub
复制代码
前段时间用Python写了一个,不过一时半会儿没法将它转为VBA,供参考。
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Mon Sep  3 22:17:44 2018

  4. @author: Roych
  5. """

  6. import pandas as pd
  7. import numpy as np
  8. df = pd.DataFrame({'cls': ['a', 'b', 'c', 'd' ,'e', 'f'],
  9.                    'pCls': [np.nan, 'a', 'b', np.nan, np.nan, 'e']})
  10. print(df)
  11. '''树结构 cls--子类名称,pCls--父类名称
  12.   cls pCls  结果显示
  13. 0   a  NaN   a(一级)
  14. 1   b    a   a--b(二级)
  15. 2   c    b   a--b--c(三级)
  16. 3   d  NaN   d
  17. 4   e  NaN   e
  18. 5   f    e   e--f
  19. '''
  20. def getData(cls):
  21.     if pd.isna(df[df['cls']==cls]['pCls'].values) == True:
  22.         df1 = df[df['cls']==cls]
  23.         result0, result1 = cls, ''.join(df1['cls'])
  24.     else:
  25.         df1 = df[df['cls']==cls]
  26.         result0, result1 = cls, getData(''.join(df1['pCls']))
  27.         result1 = result1+'--'+result0
  28.     return result1

  29. print(getData('c'))
  30. #返回:a--b--c
复制代码
3#
发表于 2018-9-28 17:09:46 | 只看该作者
一个查询就可以做到。下面做了一个4层的例子,看看能不能用。层数只受access关联表数的限制。层数太多,IIF语句不好写,可自编一个函数代替。

SELECT A.父编码, IIf(IsNull([C].[子编码]),IIf(IsNull([B].[子编码]),[A].[层级],[B].[层级]),[C].[层级]) AS 层, IIf(IsNull([C].[子编码]),IIf(IsNull([B].[子编码]),[A].[子编码],[B].[子编码]),[C].[子编码]) AS 码, IIf(IsNull(A.用量),1,A.用量)*IIf(IsNull(B.用量),1,B.用量)*IIf(IsNull(C.用量),1,C.用量) AS 量
FROM (Bom明细表 AS A LEFT JOIN Bom明细表 AS B ON A.子编码=B.父编码) LEFT JOIN Bom明细表 AS C ON B.子编码=C.父编码;

4#
 楼主| 发表于 2018-10-9 17:58:43 | 只看该作者
谢谢,学习学习再说。   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-9 05:57 , Processed in 0.090960 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表