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

sql 语句的难题!急

楼主IUPRG(给我点一首周截棍的“双杰伦”)2000-11-16 17:22:00 在 Delphi / VCL组件开发及应用 提问

我有一个主表(企业)和从表(报告):其中主表有下列字段:编号(唯一),区号,费用,报告数;从表有:编号(与主表关联,可重复),日期,报告名。主表与从表一对多关联,一个企业可能对应很多报告,而每个报告均有一个指定的日期,现根据:输入日期范围和区号范围来统计:企业数,费用,报告数.这如何是好啊?可把我急死了!   {{   ;(  
  我这样:  
  select   count(编号)   as   企业数,sum(费用),sum(报告数)    
  from   企业   a   ,报告   b   where   b.日期>#   xxxx#   and   b.日期   <   #xxxx#   and   a.区号   like   '140*'   group   by   a.编号,a.费用,a.报告数  
   
  统计出来数据不正确,小弟先谢过各位大虾了! 问题点数:20、回复次数:11Top

1 楼CABO(腊肉)回复于 2000-11-16 17:43:00 得分 8

肯定不行啦,你的主表和从表的关联体现在哪里?  
  select   count(a.编号)   as   企业数,sum(a.费用),count(b.编号)报告数    
  from   企业   a   ,报告   b   where   b.日期>#   xxxx#   and   b.日期   <   #xxxx#   and   a.区号   like   '140*'   and   a.(编号)=b.(编号)    
  但我不知道你的费用是什么,跟   B表有什么关系,如果跟报告数无关,则是上面的句子   Top

2 楼Wingsun(孙春阳)回复于 2000-11-16 17:58:00 得分 2

select   count(编号)   as   企业数,sum(费用),sum(报告数)    
  from   企业   a   ,报告   b   where   b.日期   between   #   xxxx#   and   #xxxx#   and   a.区号   like   '140*'   And     b.编号=a.编号   Order   by   a.编号,a.费用,a.报告数    
  Top

3 楼IUPRG(给我点一首周截棍的“双杰伦”)回复于 2000-11-17 09:02:00 得分 0

我刚又试过,wingsun那样的句子查出后的数据比正确的数据大两倍Top

4 楼Kingron(单身走我路……)回复于 2001-05-21 19:35:00 得分 0

提问者:如要继续讨论请定期提前贴子,反之请结束贴子,否则将在两周之内被强制结束或者删除。Top

5 楼qkl(康)回复于 2001-05-21 20:49:00 得分 2

select   count(编号)   as   企业数,sum(费用),sum(报告数)    
  from   企业   where   区号   like   '140*'   and   编号   in(  
      select   distinct   编号   from   报告   where   日期>#   xxxx#   and   日期   <   #xxxx#    
      )Top

6 楼wangxd1976(东东)回复于 2001-05-21 21:44:00 得分 2

select   count(a.编号)   as   企业数,sum(a.费用),sum(b.报告数)    
  from   企业   a   inner   join   报告   b   on   a.编号=b.编号      
  where   a.区号   like   '140*'  
      and   b.日期   >   '#xxxx#'    
      and   b.日期   <   '#xxxx#'    
   
   
  Top

7 楼wangxd1976(东东)回复于 2001-05-21 21:47:00 得分 2

select   count(a.编号)   as   企业数,sum(a.费用),count(b.报告名)    
  from   企业   a   inner   join   报告   b   on   a.编号=b.编号      
  where   a.区号   like   '140*'  
      and   b.日期   >   '#xxxx#'    
      and   b.日期   <   '#xxxx#'    
   
   
  Top

8 楼wangxd1976(东东)回复于 2001-05-21 22:02:00 得分 2

对不起,刚才没试就想当然的写了,  
  我试了试,用一个SQL语句不能实现该功能,  
  原因就是一对多,两个表连结后,交叉匹配,系统等于对所有匹配的行求值,这样就出现问题了。  
  分成两个SQL语句吧。Top

9 楼wangxd1976(东东)回复于 2001-05-21 22:08:00 得分 2

我又试了试,用子查询可以实现  
  select   count(a.编号)   as   企业数,sum(a.费用),  
                (select   count(d.报告名)    
                from   企业   c   inner   join   报告   d   on   c.编号=d.编号      
                where   c.区号   like   '140*'  
                    and   d.日期   >   '#xxxx#'    
                    and   d.日期   <   '#xxxx#')    
  from   企业   a   inner   join   报告   b   on   a.编号=b.编号      
  where   a.区号   like   '140*'  
      and   b.日期   >   '#xxxx#'    
      and   b.日期   <   '#xxxx#'    
   
   
  Top

10 楼IUPRG(给我点一首周截棍的“双杰伦”)回复于 2001-05-22 09:02:00 得分 0

十分感激,我试试Top

11 楼bigfox()回复于 2001-05-22 10:44:00 得分 0

不是大问题好好检查你的SQL  
  语句Top

相关问题

  • sql语句难题
  • sql语句,急
  • sql语句 急急
  • 急急,sql语句!
  • 关于sql语句的难题
  • 一个SQL语句的难题
  • sql语句急救
  • 急用!!sql语句
  • 急求SQL语句!!!!!!!!!!!!!
  • 求SQL语句急

关键词

  • 企业
  • 主表
  • 报告
  • 日期
  • 区号
  • 表
  • 关联
  • 费用
  • xxxx
  • 范围

得分解答快速导航

  • 帖主:IUPRG
  • CABO
  • Wingsun
  • qkl
  • wangxd1976
  • wangxd1976
  • wangxd1976
  • wangxd1976

相关链接

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

广告也精彩

反馈

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