首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

查询语句有关问题

2013-06-26 
查询语句问题一张主表对应两张子表主表字段:ID(单号),SL(数量)子表1:ID(单号),AMC(名称),NDB(含量),ZL(重

查询语句问题
一张主表对应两张子表
主表字段:ID(单号),SL(数量)
子表1:ID(单号),AMC(名称),NDB(含量),ZL(重量)
子表2:ID(单号),BMC(名称),BFB(含量),ZL(重量)

现需要实现的查询结果是主表各单号所对应的子表1中NDB、及ZL的合计;子表2中ZL的合计。
下面语句实现的结果合计值都是错的
select a.ID,a.sl,sum(b.ndb),sum(b.zl),sum(c.zl)  from a,b,c 
where b.ID = a.ID and c.ID = a.ID 
group by a.ID,a.sl


如下主表分别与子表关联查出的结果是对的,为什么上面的语句写到一起就出错,是哪写错了吗?
select a.ID,a.sl,sum(b.ndb2),sum(b.zl) from a 
where b.ID = a.ID 
group by a.ID,a.sl

select a.ID,a.sl,sum(c.zl)  from rsjh a 
where c.ID = a.ID 
group by a.ID,a.sl

select
[解决办法]
试了下还可以,又出现新问题了,主表所对应的子表,可能会出现子表中不一定同时有数据的情况,这样上面执行的结果就会丢失数据。

(+)就是做这个用的

select a.ID,a.sl,sum(b.ndb2),sum(b.zl), (select sum(c.zl) from c where a.id = c.id) from a, b
where a.ID = b.id (+)
group by a.ID,a.sl

或者

select a.ID,a.sl,sum(b.ndb2),sum(b.zl), (select sum(c.zl) from c where a.id = c.id) from a, b
where a.ID (+)= b.id 
group by a.ID,a.sl

[解决办法]
// 以下语法基于 SQL SERVER 2000
select a.ID,a.sl,
       sumOfbndb = (select sum(isnull(b.ndb,0)) from b where b.ID = a.ID),
 sumOfbzl = (select sum(isnull(b.zl,0)) from b where b.ID = a.ID),
 sumOfczl = (select sum(isnull(c.zl,0)) from z where z.ID = a.ID)  
from a 
;

热点排行