CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

一个数据累加问题

楼主frikey1977(frikey)2005-12-09 00:43:56 在 MS-SQL Server / 基础类 提问

有一个表  
  --------------------------------------  
  编号             名称             数量             单价  
  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

相关问题

  • 数据累加问题?
  • 菜鸟提问,用sql数据累加
  • 怎样实现数据库中表中字段的累加?
  • FLOAT,DECIMAL,NUMERIC类型的数据累加问题???
  • MS-SQL不能累加了,是数据类型的原因吗?
  • 两数据库表记录合并累加问题求教?
  • 数据库中相同值累加的问题!
  • 关于float字段数据累加问题
  • 在导数据的过程中丢了主键和自动累加
  • 从两张表中查询数据,累加问题!问句sql,高手入!

关键词

  • 总额
  • 单价
  • 数量
  • 产品
  • 合计
  • sum
  • 名称
  • avg
  • 不同
  • 编号

得分解答快速导航

  • 帖主:frikey1977
  • GSXiaoXiao

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo