小弟的表达能力欠佳请高手别见怪
现在有2个数量 A B,  A为进货总量,B为出货总量 A进货时有一个标识A' B出货时有一个标识B' A'位于receiving表,B'位于outgoig表 A'包括多个B' 在统计时候就出现以下问题
select a,sum(b),A',B' from a left jion b on B'=A' group by a,A',b'
由于A'包含多个B',B'中包含多个B
sum函数只把B'多个B加起来 而不能把多个B'的数量加起来 导致出现下列情况 假如A=10000 A'=2006
第一个B'包括(1000,1000,1000),第二B'包括(4000,3000),B'=2006
A        B       A'     B'
10000  3000    2006   2006
10000  7000    2006   2006
这样的话 A-sum(B)就多出来10000 逻辑上A-sum(B)=0 请高手指导select语句怎么写 小弟谢过

解决方案 »

  1.   

    我也觉得次问题靠书面的表达太难 非楼上的理解太差..是我表达太差
    上面写的急写错一句
    select a,sum(b),A',B' from receinving left jion outgoing on B'=A' group by a,A',B'
      

  2.   

    发现LZ的表达是有点不清楚。
    我想问一下
    1)既然B'都已经等于A'了,那么怎么还谈得上第一个B',第二个B'呢?
    2)假如说数据库里是分成2条记录存放的,那么为何会出现
      第一个B'包括(1000,1000,1000),第二B'包括(4000,3000)
    这样的写法呢?
      应该是分不出哪个属于第一个B',哪个属于第二个B'吧,有可能会是在数据库里分成五条记录存放吧,既然这样,为何还会出现Sum()方法取不到值的情况呢?
    3)假设说数据库里真的是分成两条记录存放,那么这种格式(1000,1000,1000)应该不是能用Sum来求和的吧,为何查询结果里偏偏又汇总了呢?
      

  3.   

    我说下具体的结构把 有2张表 1张是receiving 1张是outgoing  receiving中我取2个段1是它的数量quantity还有个是进库的单号receiving_report_no. outgoing中我取2个段1是它的数量quantity还有个是出库的单号outgoing_report_no. 比如说1件物品我进了10000的数量它的进库的单号是2006 然后我要出库第一张出库单单号是2006数量是1000,1000,1000(由于不同的部门使用所以分笔),然后第二张单子出库单号也是2006 数量是(3000,4000).出到这这张2006的进单的所有东西已经出完也就是它的quantity=0
    select receiving.quantity,sum(isnull(quantity,0))  ,receiving.receiving_report_no,outgoing.outgoing_report_no
    from receiving left join outgoing on outgoing_report_no=receiving_report_no
    group by receiving.receiving_report_no,outgoing.outgoing_report_no
    这样数据就会出现以下情况
    receiving.quantity   outgoing.quantity  outgoing_report_no receiving_report_no
    10000                 3000                 2006               2006
    10000                 7000                 2006               2006
    因为我后面要加上having receiving.quantity-sum(isnull(quantity,0))<>0
    如此一减 就会多出2条符合我select语句 但是事实上它应该是0 不知道这次高手们是否看懂 小弟我文学功底差请谅解
      

  4.   

    Create table SumGroup
    (
    materialid varchar(10),
    numbercount int,
    type varchar(10)
    )
    insert into SumGroup
    select 'jjjj',1,'入库' union all
    select 'jjjj',3,'出库' union all
    select 'jjjj',5,'入库' union all
    select 'mmmm',2,'入库' union all
    select 'mmmm',1,'出库'select * from SumGroupselect materialid,numbercount=sum(case when type='入库' then numbercount
                when type='出库' then -numbercount
              end)
    from SumGroup group by materialid
      

  5.   

    materialid numbercount type       
    ---------- ----------- ---------- 
    jjjj       1           入库
    jjjj       3           出库
    jjjj       5           入库
    mmmm       2           入库
    mmmm       1           出库materialid numbercount 
    ---------- ----------- 
    jjjj       3
    mmmm       1
    我没看懂楼主意思,不知道这个例子有没有用
      

  6.   

    第一张出库单单号是2006数量是1000,1000,1000(由于不同的部门使用所以分笔),然后第二张单子出库单号也是2006 数量是(3000,4000).上面这两张出库单(应该是现实中两张出库单)在outgoing表里是几条记录?
      

  7.   

    楼主这样子描述吧
    receiving表数据为:(为简化就列出数量及单号即可)
    outgoing表数据为: 然后,你要的结果是:
      

  8.   

    最好别产生表 我写的是视图 如果生成表的话 这问题就没那么复杂了 我可以先建立个我要的表结构然后在从表里分别引用的我需要的数据insert into进去 但是这样太麻烦 既然碰到了这个在视图里碰到的问题 我就想去了解它解决的方法 感谢楼上的回答 是否还有其他高手为小弟我解答
      

  9.   

    group by receiving.receiving_report_no,outgoing.outgoing_report_no
    去掉后面一个
      

  10.   

    进库的单号和出库单号相同??
    select receiving_report_no ,
      receiving.quantity as input,
      sum(isnull(outgoing.quantity,0)) as output
    from receiving 
    left join outgoing 
    on outgoing_report_no=receiving_report_no
    group by receiving_report_no,receiving.quantity
    having receiving.quantity-sum(isnull(outgoing.quantity,0))<>0