select sum(project_fj.danjia*project_fj.mianji) from project_fj,orderform where project_fj.zhuangtai='未售' and project_fj.project_id=30问题是表orderform没有哪列在语句中被用到,但是加上orderform以后算出来的值大了很多?这是怎么一回事啊

解决方案 »

  1.   

    project_fj,orderform 这两个表有关联吗?这样会形成笛卡儿积,所以相当于A×B的情况,当然出来的结果不一样了。你先用select * from project_fj,orderform where project_fj.zhuangtai='未售' and project_fj.project_id=30看一下你的结果接你就知道了
     
      

  2.   

    先看 select * from a 
    select * from a ,b 
    有什么区别。
      

  3.   

    表project_fj的主键id是orderform的外键project_id。但是我在where条件中已经加了表明了呀。project_fj.project_id=30
      

  4.   


    --笛卡儿积,交叉关联,project_fj表中的一列会匹配到orderform的所有列,sum造成错误的结果
    select sum(project_fj.danjia*project_fj.mianji) from project_fj,orderform where project_fj.zhuangtai='未售' and project_fj.project_id=30
    and project_fj.id=orderform.roject_id
      

  5.   

    就是说把所有的列加上表名project_fj是么?
      

  6.   


    --你那个表又没用,直接这样就好了啊?
    select sum(danjia*mianji) from project_fj where zhuangtai='未售' and project_id=30
    --如果和那个表有关联,再用关联列join起来啊
      

  7.   

    这么orderform是有用的,这个sql语句其他部分要用到。
    完整的sql语句为
    select project_name, sum(case  when zhuangtai= '已售' and project_fj.id=orderform.fj_id   then (orderform.dd_chengjiaojiage) else 0 end) as 已售总值,sum(case  when  zhuangtai in('未售','大定','小定','保留') then (danjia*mianji+jg_ccs*mj_ccs+jg_ck*mj_ck) else 0 end) as 未售总值,sum(danjia*mianji+jg_ccs*mj_ccs+jg_ck*mj_ck) as 全部总值 from project_fj,project,orderform  where project.id=project_fj.project_id  GROUP BY project_name
      

  8.   

    and project_fj.id=orderform.fj_id then (orderform.dd_chengjiaojiage) else 0 end) as 已售总值
    这里不就是有关联了么
      

  9.   

    “已售总值”sum出来的数是正确的,但是“未售总值”sum的不正确,应该怎样修改呢?
      

  10.   

    sum(case when zhuangtai in('未售','大定','小定','保留') then (danjia*mianji+jg_ccs*mj_ccs+jg_ck*mj_ck) else 0 end) as 未售总值
    这个语句中when条件中可以用in?
      

  11.   

    越说越乱了。我的问题是怎样修改sql语句,使 from 中包含表orderform,但是又避免重复计算orderform中中的列值(笛卡尔积现象)?
      

  12.   

    select project_name,
           sum(case
                 when zhuangtai = '已售' then
                  (orderform.dd_chengjiaojiage)
                 else
                  0
               end) as 已售总值,
           sum(case
                 when zhuangtai in ('未售', '大定', '小定', '保留') then
                  (danjia * mianji + jg_ccs * mj_ccs + jg_ck * mj_ck)
                 else
                  0
               end) as 未售总值,
           sum(danjia * mianji + jg_ccs * mj_ccs + jg_ck * mj_ck) as 全部总值
      from project_fj left join orderform on project_fj.id = orderform.fj_id, project
     where project.id = project_fj.project_id
     GROUP BY project_name这个试试看的呢,我这边没有sql server 暂时没办法试