如有表:a,b
a表字段:cost,...
b字段:total,type...
我想将满足条件type=true的total求和值作为一个字段,type=false的total求和值作为另一个字段,应如何写?select SUM(a.Cost),SUM( iif ( b.Type=True , b.Totai , 0 )) as total1,
sum(iif( b.Type=false , b.total , 0 )) as total2 from a,b
可以,但求出的sum和不对,不是每个表对应字段的总值,这是为什么后来用简化试了一下
select sum(a.cost),sum(b.total) from a,b
这样的sql语句不成立?单表求和可以,两个表好像分别求和就不可以了??那要实现我的条件:查各个表的某字段求和应如何写?请高手指点一下,谢谢

解决方案 »

  1.   

    a表和b表没关联呵,用什么字段关联起来的,没关联你却用b表的条件去找a表的记录,不解。
      

  2.   

    有关联的话就分两句做:1、type=true的total求和值作为一个字段select SUM(a.cost) from a inner join b on b.关联字段=a.关联字段 where b.type=true2、type=false的total求和值作为另一个字段select SUM(a.cost) from a inner join b on b.关联字段=a.关联字段 where b.type=false
      

  3.   

    你这样A和B两个表一点关联都没有,取的数据是两个表记录数的乘积关系,和肯定不对!!
    你的AB两表有什么关联!?
      

  4.   

    一定要有关联字段才可以吗?如果没有关联字段就不能一块查询?那必须每个表一个一个求和?
    a表的id和b表的id相等,但是每个表的记录数都不一样,
    to小健:我没有用b表的条件去找a表的记录,找的是b表的记录啊那查各个表的某字段求和应如何写?
      

  5.   

    必须select sum(cost) from a 
    select sum(total) from b where type=true
    select sum(total) from b where type=false
    只能分成三句写?那不是要打开三个记录集?如果我有5张表要求和统计,那不是要有很多个记录集打开?有没有简单点的方法?谢谢
      

  6.   

    呵呵。看来楼主还没弄清A和B的关系。。车是交各种费用。但是交的费的是属于哪辆车的,这必须有对应关系。。A表中是车辆信息。
    B表中是交的各种费用。显示。B表中还应多包含一个字段信息,标识交费记录属于哪辆车。比如可以车牌号,作为它的外键。。
      

  7.   

    select sum(cost) from a必须要单独写,
    select sum(total) from b where type=true
    select sum(total) from b where type=false
    可以合并起来,因为都是对同一张表,如果要把a何b合起来查,那a和b就应该有关系,就拿你的比喻,这两个表里出来的数据至少也应该都是对应你那辆车吧
      

  8.   

    不好意思,确实还没有弄清楚,不知道是不是我没有说清楚
    to大头河马:“车是交各种费用。但是交的费的是属于哪辆车的,这必须有对应关系。。”
    这个关系有,每张表都有一个id标识,就像你所说的标识交费记录属于哪辆车
    但问题是比如a表是记录这辆车每次交的保养费,b表是这辆车记录每次用的买路费,这些费用是没有关系的,我先假定是a,b表中记录的是同一辆车的费用记录,只是不同的费用记录,那我要算的总的买路费,总的保养费,就只能单独从各自的表中求和?那如果还有什么油费表,维修费表,那不是都要一个一个求,不是很麻烦?打开一张表要一个记录集,好几张表就要打开好几个记录集才能取到所有的费用?
      

  9.   

    to 从头再来:select sum(total) from b where type=true 
    如果我没有符合条件的记录为什么还会出现recordcount=1 的现象?但rs.fields(0)为null
    如果select total 就不会出现这个问题,这是为什么?还请各位再赐教!谢谢
      

  10.   

    select sum(t1) as total1,sum(t2) as total2,sum(t3) as total3 
    from
    (
    select sum(cost) t1,0 as t2,0 as t3 from a
    union all
    select 0,SUM(iif(b.Type=True,b.Total,0)),
           sum(iif(b.Type=false,b.total,0)) 
    from b
    )
      

  11.   

    小马哥想的是对的,
    其实楼主就想返回一条记录,这条记录中的各个费用字段在不同的表中。
    还可以这样写:select t1,t2,t3
    from
    (
    select sum(cost) t1,0 as t2,0 as t3 from a
    union all
    select 0 as t1,sum(total) as t2 ,0 as t3 from b where type=true
    union all 
    select 0 as t1,0,as t2,sum(total) as t3 from b where type=false
    ) as TotalTable其中totaltable 最后的每一个字段对应一表中数据和,多加一项统计就在()中加一个
    union all +统计sql。
    按楼主的意思是求总和,并没有分组,所以()内的统计sql都返回一条记录的,所以totaltable中各个字段不用加sum了,在字段中加函数运算不如分成两个sql来写,这样运效率要高一些。
      

  12.   

    谢谢各位帮忙!
    按照小马哥和andy的方法调试,成功!感谢。