萍聚社区-德国热线-德国实用信息网

 找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 1657|回复: 20

[计算机] 求教一个数据库的问题.

[复制链接]
发表于 2007-1-5 20:19 | 显示全部楼层 |阅读模式
$frage$

各位朋友, 你好.

小弟最近做一个有关Access数据库的作业时碰到一个计算和同个组件汇总的问题.具体如下:

A 产品 由 2个B1, 2个B2 和 2个A2构成

B1由3个C11 和 3个C12 组成
A2由3个B1 和 3个C12 组成

老师的要求是:
系统能够自动计算出: A 由2个B1, 8个B2 , 2个A2, 24个C11, 30个C12.

我自己设计的程序是分层计算.但相同的产品不会汇总:

第一层: 2个B1, 2个B2 和 2个A2
第二层: 在B1下面是6个C11 和 6个C12; A2下面是: 6个B1 和6个C12
第三层: 在B1 下面是18个C11, 和18个C12.

怎么样才能让我的程序汇总出A 是由2个B1, 8个B2 , 2个A2, 24个C11, 30个C12 构成的呢? 或者根本就不需要分成计算??

本帖子中包含更多资源

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

x
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-1-6 10:38 | 显示全部楼层
如果是我,只能用SQL的子查询实现,Excel的实际应用我不太会。

看看有没有其他人能帮上忙,另外能否透露一下课名,这样大致有个方向。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2007-1-7 00:04 | 显示全部楼层
:) 谢谢楼主的回帖! 我的课名是 Access 数据库的应用. 这里没有涉及到Excel. 请问楼主的"用SQL的子查询实现"能否具体点? 谢谢
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-1-7 00:30 | 显示全部楼层
比如 select colum1 from table1 where colum2 in (select colum2 from table2 where colum3 = ‘xxx’);
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2007-1-7 12:45 | 显示全部楼层
谢谢答复. 也许是我没有真的明白你的意思. 但是我觉得版主的主意好像很难实现.
因为我的产品构成表分10层, 而且有可能同一个构成部件不只在2层出现,有可能3层,4层甚至9层都有. 每层具有N多个不同或者相同的部件产品. 根据排列组合的道理 这里的重复的部件产品已经接近无穷多. 如果用select语句一个个写出有可能重复的情况, 好像已经接近不可能了.
我的愚蠢的原Select代码如下,希望各位好友能指点, 哪怕是批评, 建议也好. 谢谢

SELECT costitemQry.productname, costitemQry.productmenge, costitemQry.description, IIf(costitemQry![1articlename] Is Null,Null,1) AS 1, costitemQry.[1articlename], costitemQry.[1article_nr], [productmenge]*[1quantity] AS sum1, costitemQry.[1production_index], IIf(costitemQry![2articlename] Is Null,Null,2) AS 2, costitemQry.[2articlename], costitemQry.[2article_nr], [sum1]*[2quantity] AS sum2, costitemQry.[2production_index], IIf(costitemQry![3articlename] Is Null,Null,3) AS 3, costitemQry.[3articlename], costitemQry.[3article_nr], [sum2]*[3quantity] AS sum3, costitemQry.[3production_index], IIf(costitemQry![4articlename] Is Null,Null,4) AS 4, costitemQry.[4articlename], costitemQry.[4article_nr], [sum3]*[4quantity] AS sum4, costitemQry.[4production_index], IIf(costitemQry![5articlename] Is Null,Null,5) AS 5, costitemQry.[5articlename], costitemQry.[5article_nr], [sum4]*[5quantity] AS sum5, costitemQry.[5production_index], IIf(costitemQry![6articlename] Is Null,Null,6) AS 6, costitemQry.[6articlename], costitemQry.[6article_nr], [sum5]*[6quantity] AS sum6, costitemQry.[6production_index], IIf(costitemQry![7articlename] Is Null,Null,7) AS 7, costitemQry.[7articlename], costitemQry.[7article_nr], [sum6]*[7quantity] AS sum7, costitemQry.[7production_index], IIf(costitemQry![8articlename] Is Null,Null,8) AS 8, costitemQry.[8articlename], costitemQry.[8article_nr], [sum7]*[8quantity] AS sum8, costitemQry.[8production_index], IIf(costitemQry![9articlename] Is Null,Null,9) AS 9, costitemQry.[9articlename], costitemQry.[9article_nr], [sum8]*[9quantity] AS sum9, costitemQry.[9production_index], IIf(costitemQry![10articlename] Is Null,Null,10) AS 10, costitemQry.[10articlename], costitemQry.[10article_nr], [sum9]*[10quantity] AS sum10, costitemQry.[10production_index]
FROM costitemQry
ORDER BY costitemQry.productname, costitemQry.[1articlename], costitemQry.[2articlename], costitemQry.[3articlename], costitemQry.[4articlename], costitemQry.[5articlename], costitemQry.[6articlename], costitemQry.[7articlename], costitemQry.[8articlename], costitemQry.[9articlename], costitemQry.[10articlename];

$考虑$
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-1-7 13:15 | 显示全部楼层
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2007-1-7 13:44 | 显示全部楼层
:) 10层是指有层次关系的产品构成. 比如如上面的Structure图: A产品由B1, B2 和 A2构成, 其中的B1, B2 和 A2就是第一层. B1下面的C11,C12就是第二层.
所有的产品基本上只放在一个表里面. 通过查询来实现它的功能.

我的Email: joed968@yahoo.com
05111325379
谢谢了
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-1-7 19:21 | 显示全部楼层
能否把表结构放上来瞧瞧? 不过偶不是学Info的,说不定其他学Info的学生不需要也能作出来,就当是把你顶了。
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
 楼主| 发表于 2007-1-8 00:03 | 显示全部楼层
:) 很乐意把我做的丑东东传上来,但是好像回帖时是传不少附件的呢.
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2007-1-8 14:22 | 显示全部楼层
我试着做了一下,并在MySQL上测试,可以得出结果,但是有两个小问题:

1。楼主提供的答案:“2个B1, 8个B2”是不是弄反了?应该是2个B2, 8个B1吧。
2。题目有没有给定条件,说明A类只包括A1,A2两种,B类只包括B1,B2两种,C类也只包括两种,依此类推一直到第10层?如果没有提供这样的条件,这道题将必须通过编程实现,也就是说要不停的做深度探测,比如如下情况理路上都是可以发生的:A1下有A2,A2下有A3。。。An下才有一个B1;这样是无法手动通过SQL实现查询的。

我是假设题目给定条件,每个字幕只有两种类型,也就是说如楼主例子中的情况,只有X1和X2。

建表结构:

A表:
+------+------+
| name | link |
+------+------+
| A1   | B1   |
| A1   | B1   |
| A1   | B2   |
| A1   | B2   |
| A1   | A2   |
| A1   | A2   |
| A2   | B1   |
| A2   | B1   |
| A2   | B1   |
| A2   | C12  |
| A2   | C12  |
| A2   | C12  |
|      |      |
+------+------+

B表:

+------+------+
| name | link |
+------+------+
| B1   | C11  |
| B1   | C11  |
| B1   | C11  |
| B1   | C12  |
| B1   | C12  |
| B1   | C12  |
+------+------+


查询A只需直接查询A表


查询A2:

SELECT * FROM A WHERE name="A1" AND link="A2";




查询B需要直接查询A表,以及A-A的链接


查询B1:

SELECT * FROM A WHERE name="A1" AND link="B1"  
union all
SELECT A2.name, A2.link FROM A AS A1 INNER JOIN A AS A2 ON A1.link=A2.name WHERE A1.name="A1" AND A2.link="B1";

查询B2:

SELECT * FROM A WHERE name="A1" AND link="B2"  
union all
SELECT A2.name, A2.link FROM A AS A1 INNER JOIN A AS A2 ON A1.link=A2.name WHERE A1.name="A1" AND A2.link="B2";




查询C需要直接查询A表,以及A-A,A-B表的链接,以及A-A-B,A-B-B,A-A-B-B


查询C11:

SELECT * FROM A WHERE name="A1" AND link="C11"
union all
SELECT A2.name, A2.link FROM A AS A1 INNER JOIN A AS A2 ON A1.link=A2.name WHERE A1.name="A1" AND A2.link="C11"
union all
SELECT A.name, B.link FROM A INNER JOIN B ON A.link=B.name WHERE A.name="A1" AND B.link="C11"
union all
SELECT A1.name, B.link FROM A AS A1 INNER JOIN A AS A2 ON A1.link=A2.name INNER JOIN B ON A2.link=B.name WHERE A1.name="A1" AND B.link="C11"
union all
SELECT A.name, B2.link FROM A INNER JOIN B AS B1 ON A.link=B1.name INNER JOIN B AS B2 ON B1.link=B2.name WHERE A.name="A1" AND B2.link="C11"
union all
SELECT A1.name, B2.link FROM A AS A1 INNER JOIN A AS A2 ON A1.link=A2.name INNER JOIN B AS B1 ON A2.link=B1.name INNER JOIN B AS B2 ON B1.link=B2.name WHERE A1.name="A1" AND B2.link="C11";

查询C12:

SELECT * FROM A WHERE name="A1" AND link="C12"
union all
SELECT A2.name, A2.link FROM A AS A1 INNER JOIN A AS A2 ON A1.link=A2.name WHERE A1.name="A1" AND A2.link="C12"
union all
SELECT A.name, B.link FROM A INNER JOIN B ON A.link=B.name WHERE A.name="A1" AND B.link="C12"
union all
SELECT A1.name, B.link FROM A AS A1 INNER JOIN A AS A2 ON A1.link=A2.name INNER JOIN B ON A2.link=B.name WHERE A1.name="A1" AND B.link="C12"
union all
SELECT A.name, B2.link FROM A INNER JOIN B AS B1 ON A.link=B1.name INNER JOIN B AS B2 ON B1.link=B2.name WHERE A.name="A1" AND B2.link="C12"
union all
SELECT A1.name, B2.link FROM A AS A1 INNER JOIN A AS A2 ON A1.link=A2.name INNER JOIN B AS B1 ON A2.link=B1.name INNER JOIN B AS B2 ON B1.link=B2.name WHERE A1.name="A1" AND B2.link="C12";

评分

1

查看全部评分

Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

手机版|Archiver|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网

GMT+1, 2025-2-1 18:49 , Processed in 0.069670 second(s), 17 queries , MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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