日期:2014-05-18  浏览次数:20391 次

求一SQL语句,在线等!
有两个表:主表:ContentID(主键),BilType(I=进货,P=现款进货,O=退货)
                  从表:BillID(关联主表主键),GoodID,GoodsAmount
现在要得到的结果就是把 '进货 '和 '现款进货 '的总和减去 '退货 '的总和得到最终的总进货数量,在线等

------解决方案--------------------
Select Sum(Case when a.BilType= '退货 ' then -b.GoodsAmount
else b.GoodsAmount end) as 总进货数量
from 主表 as a inner Join 从表 as b on a.ContentID=b.BillID
------解决方案--------------------
Select Sum(Case when a.BilType= 'O ' then -b.GoodsAmount
else b.GoodsAmount end) as 总进货数量
from 主表 as a inner Join 从表 as b on a.ContentID=b.BillID

------解决方案--------------------
主表的记录数量 <=从表的记录数量。
这样的话 用left 与 inner 是一样的。
------解决方案--------------------
select sum(GoodsAmount) 总进货数量 from
(
select GoodsAmount =
case
when BilType = 'I ' then GoodsAmount
when BilType = 'P ' then GoodsAmount
when BilType = 'O ' then 0 - GoodsAmount
end
from 主表,从表 where 主表.ContentID=从表.BillID
) t
------解决方案--------------------
Select Sum(Case when a.BilType= '0 ' then -b.GoodsAmount
else b.GoodsAmount end) as 总进货数量
from 主表 as a inner Join 从表 as b on a.ContentID=b.BillID

------解决方案--------------------
ChinaArmy() ( ) 信誉:100 2007-09-07 15:23:39 得分: 0
多谢楼上的,再问下,用Left JION,行不行呀,两者有区别吗
------------------------------
Left Join 当然跟Inner Join 不同啊?
如下面这句,(统计每个ContentID的总进货数量)
如果你主表ContentID含有从表里BillID没有的值的话
下面这句将会以0显示
Select A.ContentID,
IsNull(Sum(Case A.BilType When 'I ' Then B.GoodsAmount
When 'P ' Then B.GoodsAmount
When 'O ' Then -B.GoodsAmount End)
,0) As 总进货数量
From
主表 As A
Left Join 从表 As B
On A.ContentID=B.BillID
Group By A.ContentID