小弟的表达能力欠佳请高手别见怪
现在有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语句怎么写 小弟谢过
现在有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语句怎么写 小弟谢过
上面写的急写错一句
select a,sum(b),A',B' from receinving left jion outgoing on B'=A' group by a,A',B'
我想问一下
1)既然B'都已经等于A'了,那么怎么还谈得上第一个B',第二个B'呢?
2)假如说数据库里是分成2条记录存放的,那么为何会出现
第一个B'包括(1000,1000,1000),第二B'包括(4000,3000)
这样的写法呢?
应该是分不出哪个属于第一个B',哪个属于第二个B'吧,有可能会是在数据库里分成五条记录存放吧,既然这样,为何还会出现Sum()方法取不到值的情况呢?
3)假设说数据库里真的是分成两条记录存放,那么这种格式(1000,1000,1000)应该不是能用Sum来求和的吧,为何查询结果里偏偏又汇总了呢?
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 不知道这次高手们是否看懂 小弟我文学功底差请谅解
(
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
---------- ----------- ----------
jjjj 1 入库
jjjj 3 出库
jjjj 5 入库
mmmm 2 入库
mmmm 1 出库materialid numbercount
---------- -----------
jjjj 3
mmmm 1
我没看懂楼主意思,不知道这个例子有没有用
receiving表数据为:(为简化就列出数量及单号即可)
outgoing表数据为: 然后,你要的结果是:
去掉后面一个
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