sql 语句的难题!急
我有一个主表(企业)和从表(报告):其中主表有下列字段:编号(唯一),区号,费用,报告数;从表有:编号(与主表关联,可重复),日期,报告名。主表与从表一对多关联,一个企业可能对应很多报告,而每个报告均有一个指定的日期,现根据:输入日期范围和区号范围来统计:企业数,费用,报告数.这如何是好啊?可把我急死了! {{ ;(
我这样:
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




