一个数据累加问题
有一个表
--------------------------------------
编号 名称 数量 单价
1 产品1 10 5
2 产品1 10 9
3 产品2 20 7
4 产品2 30 2
5 产品3 40 9
----------------------------------------
需要结果
--------------------------------------------------
编号 名称 数量 单价 合计 总额
1 产品1 20 7 140 700
3 产品2 50 4 200 700
5 产品3 40 9 360 700
--------------------------------------------------
具体算法是
每种产品是不同时期入库的,所以单价不同,不同记录相同的产品对数量相加得到数量
根据不同批次产品的单价和数量加权平均得到单价,合计就是合并后的数量与单价乘积,总额是所有合计金额的总合
其实就是把产品重复记录数量累加,算出单价、合计、总额
问题点数:20、回复次数:7Top
1 楼wutao411(了缘)回复于 2005-12-09 08:22:04 得分 0
select min(编号) ,名称,sum(数量 ) ,avg( 单价 ) ,avg(单价)*sum(数量 ) as 合计
from table
group by 名称
select sum(avg(单价)*sum(数量 ) ) as 总额 from table
总额就不能做在一起的了Top
2 楼wutao411(了缘)回复于 2005-12-09 08:22:58 得分 0
select min(编号) ,名称,sum(数量 ) ,avg( 单价 ) ,avg(单价)*sum(数量 ) as 合计,
(select sum(avg(单价)*sum(数量 ) ) as 总额 from table ) as 总额
from table
group by 名称
Top
3 楼mislrb(上班看看早报,上上CSDN,下班看看电影)回复于 2005-12-09 08:52:08 得分 0
declare @t table(编号 int identity(1,1),名称 varchar(10),数量 int,单价 float)
insert @t
select '产品1',10, 5 union all
select '产品1',10, 9 union all
select '产品2',20, 7 union all
select '产品2',30, 2 union all
select '产品3',40, 9
/*
----------------------------------------
需要结果
--------------------------------------------------
编号 名称 数量 单价 合计 总额
1 产品1 20 7 140 700
3 产品2 50 4 200 700
5 产品3 40 9 360 700
--------------------------------------------------
*/
select 编号=min(编号),
名称,
数量=sum(数量),
单价=cast(avg(单价) as int),
合计=cast(sum(数量)*avg(单价) as int),
总额=(select cast(sum(数量*单价) as int) from @t)
from @t
group by 名称
编号 名称 数量 单价 合计 总额
----------- ---------- ----------- ----------- ----------- -----------
1 产品1 20 7 140 700
3 产品2 50 4 225 700
5 产品3 40 9 360 700
(所影响的行数为 3 行)
Top
4 楼lichangzai(搞没搞定)回复于 2005-12-09 09:38:53 得分 0
declare @t table(id int,name char(10),sl int,dj int)
insert @t
select 1,'产品1',10,5 union all
select 2,'产品1',10,9 union all
select 3,'产品2',20,7 union all
select 4,'产品2',30,2 union all
select 5,'产品3',40,9
select a.name,
sl=sum(a.sl),
dj=((select sum(sl*dj)
from @t
where [name]=a.[name]
group by [name])
/sum(a.sl)),
hj=(select sum(sl*dj)
from @t
where [name]=a.[name]
group by [name]),
ze=(select sum(sl*dj)
from @t )
from @t a
group by a.name
Top
5 楼GSXiaoXiao(牧羊人)回复于 2005-12-09 10:35:06 得分 20
select min(编号) ,名称,sum(数量) ,sum(单价*数量 )/ sum(数量) as 平均单价 ,sum(单价*数量 ) as 合计,平均单价*sum(数量 ) as 总额
from table
group by 名称Top
6 楼GSXiaoXiao(牧羊人)回复于 2005-12-09 10:38:27 得分 0
wutao411(了缘)平均单价计算有问题Top
7 楼frikey1977(frikey)回复于 2005-12-09 19:10:32 得分 0
感谢各位帮助,大家的方法让我思路开阔不少,问题已经解决,GSXiaoXiao(牧羊人)的方法有简单又明了对我很有帮助,但是有点问题,平均单价是一个别名,在最后计算总额的时候不能被识别,至少在SQLServer是这样,这块我用了个子查询解决
select min(编号) ,名称,sum(数量) ,sum(单价*数量 )/ sum(数量) as 平均单价 ,sum(单价*数量 ) as 合计,(select sum(单价*数量 ) from table) as 总额
from table
group by 名称Top




