&&这个问题应该怎么做?分不够可以再加&&
有这么两个表:
db1:材料信息表,字段如下:
材料编号 材料名称 价格
1 A 2
2 B 3
....
db2:材料用量表:字段如下:
条目编号 材料编号1 材料用量2 材料编号2 材料用量2 材料编号3 材料用量3
001 1 20 2 30 3 40
002 1 50 3 50 4 80
...
为了说明问题,每个表下面各写了两条记录
要实现的功能:给定几个条目编号,然后得到一个材料汇总表,即得到所给这几个条目中的材料的汇总表:
材料名称 价格 总的用量 总的价格
xxx 5656.0
xxxx 2525.0
要实现这样的功能,应该如何做?谢谢,分不够,可以另开帖再加
问题点数:100、回复次数:16Top
1 楼jiezhi(风满袖)回复于 2003-04-01 20:24:17 得分 0
从你的材料用量表看,我想问:
材料编号只有这么三种吗?Top
2 楼lesstif(品位人生)回复于 2003-04-01 20:30:09 得分 5
select t1.材料名称,t1.价格,sum(t1.价格) as 总的价格,sum(t2.材料用两) from t1, t2
where t1.材料编号 = t2.材料编号Top
3 楼Samland(samland)回复于 2003-04-01 20:42:24 得分 5
我已经用Access验证过,你试试看吧
create table table1(
i_no int Primary Key,
i_name char,
i_peice float
);
create table table2(
m_no int Primary Key,
m_i_no int references table1(i_no),
m_quan char
);
SELECT First(a.i_name) AS 材料名称, First(a.i_price) AS 价格, Sum(b.m_quan) AS 总的用量
FROM table1 AS a INNER JOIN table2 AS b ON a.i_no = b.m_i_no
GROUP BY b.m_i_no;
Top
4 楼Samland(samland)回复于 2003-04-01 20:44:12 得分 0
如果你总的价格意思是求价格的平均的话
SELECT First(a.i_name) AS 材料名称, First(a.i_price) AS 价格, Sum(b.m_quan) AS 总的用量, Avg(a.i_price) AS 总的价格
FROM table1 AS a INNER JOIN table2 AS b ON a.i_no = b.m_i_no
GROUP BY b.m_i_no;
Top
5 楼wzh1215(懒猫)回复于 2003-04-01 21:21:34 得分 0
使用存储过程比较好Top
6 楼joky1981(共享)回复于 2003-04-01 21:27:48 得分 45
SELECT db1.材料名称, db1.价格, sum(总的价格) ,sum(总的用量)
FROM
(SELECT db1.材料名称, db1.价格, sum(材料用量1 * db1.价格) as 总的价格,sum(材料用
量) as 总的用量
FROM db1,db2
WHERE db1.材料编号=db2.材料编号1
UNION
SELECT db1.材料名称, db1.价格, sum(材料用量2 * db1.价格) as 总的价格,sum(材料用
量) as 总的用量
FROM db1,db2
WHERE db1.材料编号=db2.材料编号2
UNION
SELECT db1.材料名称, db1.价格, sum(材料用量3* db1.价格) as 总的价格,sum(材料用
量) as 总的用量
FROM db1,db2
WHERE db1.材料编号=db2.材料编号3)
GROUP BY db1.材料名称Top
7 楼joky1981(共享)回复于 2003-04-01 21:29:39 得分 0
不过说句老实话,我觉得你这样定义数据表是不是有点太累了,至于上面的方法在DB2中应该可以用,其他的就不知道了,但意思应该是这样了Top
8 楼joky1981(共享)回复于 2003-04-01 21:30:16 得分 0
就是100分是不是有点少了?Top
9 楼nonheartboy(我爱bcb)回复于 2003-04-01 21:41:19 得分 0
to joky1981:
只要能解决问题,另外200分奉送Top
10 楼joky1981(共享)回复于 2003-04-02 14:06:13 得分 0
那你先试一试,看看可以否。
你用的是什么系统?
祝你好运!Top
11 楼joky1981(共享)回复于 2003-04-02 14:06:31 得分 0
什么数据库?Top
12 楼lazywolf(二代)回复于 2003-04-02 15:27:11 得分 0
select 材料名称,价格,Sum(总的用量) as 总的用量,Sum(总的用量)*价格 as 总的价格 into db3 from
(
select Sum(db2.材料用量1) as 总的用量,db2.材料编号1 as 材料编号,isnull(db1.价格,0) as 价格,db1.材料名称 as 材料名称 from db2 left join db1 on db1.材料编号=db2.材料编号1 group by db2.材料编号1,db1.价格,db1.材料名称
union
select Sum(db2.材料用量2) as 总的用量,db2.材料编号2 as 材料编号,isnull(db1.价格,0) as 价格,db1.材料名称 as 材料名称 from db2 left join db1 on db1.材料编号=db2.材料编号2 group by db2.材料编号2,db1.价格,db1.材料名称
union
select Sum(db2.材料用量3) as 总的用量,db2.材料编号3 as 材料编号,isnull(db1.价格,0) as 价格,db1.材料名称 as 材料名称 from db2 left join db1 on db1.材料编号=db2.材料编号3 group by db2.材料编号3,db1.价格,db1.材料名称
) a
group by 材料名称,价格
汇总数据放入db3内
测试无问题,楼主可以放分了!Top
13 楼nonheartboy(我爱bcb)回复于 2003-04-02 18:53:47 得分 0
原来的表db2,没有扩展性,设计不合理
改了以下,这次应该好点
条目编号 材料编号 材料用量
001 1 20
001 2 30
001 3 40
002 1 50
002 3 50
002 4 80
Top
14 楼nonheartboy(我爱bcb)回复于 2003-04-02 19:26:49 得分 0
joky1981(),lazywolf(二代):
数据库是用access建的。
你们的代码我看了看,你们辛苦了,真不好意思,让你们敲这么多字符
但是其中没有条件:给定几个条目编号,比如控制条目编号位:001,002,003,004,对这几条进行材料汇总。
自己写了写,还是写不出来
如果把表db2的格式改为楼上说的情况,是否应该好写一些了
Top
15 楼joky1981(共享)回复于 2003-04-03 11:58:45 得分 0
如果按上面那位的建表的话,那就回好写很多了,所以我早说“你这样定义数据表太累了”,早就应该更改表的结构了。
建表主要应该考虑到:
1、尽量减少冗余空间;
2、满足三范式以上;
3、便于操作。
共同学习!祝好运!Top
16 楼lazywolf(二代)回复于 2003-04-03 14:53:59 得分 45
呵呵,如果改成nonheartboy(我爱bcb) 的表结构,汇总当然是很容易了
:)
下面的语句你在Access里试试了:
select db1.材料名称,db1.价格,Sum(db2.材料用量) as 材料总量,Sum(db2.材料用量*db1.价格) as 材料总价 from db1,db2 where db1.材料编号=db2.材料编号 and db1.材料编号 in ('1','2','3','4') group by db1.材料名称,db1.价格
上面的Sql语句采用的是nonheartboy(我爱bcb) 的db2表数据结构
条目编号 材料编号 材料用量
001 1 20
001 2 30
001 3 40
002 1 50
002 3 50
002 4 80
Sql语句中“db1.材料编号 in ('1','2','3','4')”是对1,2,3,4的材料进行汇总,如果要所有的进行汇总,去掉这个判断条件就可以了!
Top




