CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

&&这个问题应该怎么做?分不够可以再加&&

楼主nonheartboy(我爱bcb)2003-04-01 19:50:47 在 Delphi / 数据库相关 提问

有这么两个表:  
  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

相关问题

  • 这个功能应该如何实现?高分请教,不够可以再加
  • 100分,不够加帖!
  • 100分!不够再加
  • 100分!不够再加
  • 求助,分不够再加
  • HELP!!!不够再加分
  • 放分了,不够再加
  • 100分不够再加!
  • 100分,不够在加
  • 这个函数应该怎样写?(不够以后再加分) 最好马上有!!!!!

关键词

  • db
  • 语句
  • 材料
  • 用量
  • 价格
  • 编号
  • 名称
  • 条目
  • 总
  • 表

得分解答快速导航

  • 帖主:nonheartboy
  • lesstif
  • Samland
  • joky1981
  • lazywolf

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo