还是刚才这个帖子,
地址http://topic.csdn.net/u/20090216/10/6f6a1894-1f51-432c-b676-816271ee0cec.html?seed=221566552
表 table 
表中列 
fgysbm(供应商编码),fsj(时间用来进行排序),fcpbm(产品编码),fdj(单价),fsl(数量) 
可能的数据 
001          2008-05-02            010101        0.12      126 
001          2008-05-03            010101        0.11      212 
001          2008-05-04            010101        0.10      526 002            .................... 希望得到的结果 
            最大单价  最小单价  平均单价1  平均单价2  最新单价  最大数量  最小数量  最新数量 
001 010101  0.12      0.10    0.11        0.10      0.10    526      126      526 
上面的平均单价1的算法是直接用avg来得出的 
还有一种平均单价2应该是  sum(fdj*fsl)/sum(fsl)来得出,
我按照下面的写法写好之后,所有记录的最新单价跟最新数量都是一样的select fgysbm,fcpbm, 
      max(fdj) 最大单价, 
      min(fdj) 最小单价, 
      avg(fdj) 平均单价1, 
      sum(fdj*fsl)/sum(fsl)平均单价2, 
      (select top 1 fdj from table where fgysbm = m.fgysbm and fcpbm = n.fcpbm order by fsj desc) 最新单价, 
      max(fsl) 最大数量, 
      min(fsl) 最小数量, 
      (select top 1 fsl from table where fgysbm = m.fgysbm and fcpbm = n.fcpbm order by fsj desc) 最新数量 
from table m 
group by fgysbm,fcpbm 

解决方案 »

  1.   


    declare @t table(fgysbm varchar(10),fsj datetime,fcpbm varchar(20),fdj numeric(5,2),fsl int) 
    insert into @t select '001','2008-05-02','010101',0.12,126 
    insert into @t select '001','2008-05-03','010101',0.11,212 
    insert into @t select '001','2008-05-04','010101',0.10,526 select fgysbm,fcpbm, 
          max(fdj) 最大单价, 
          min(fdj) 最小单价, 
          avg(fdj) 平均单价1, 
          sum(fdj*fsl)/sum(fsl)平均单价2, 
          (select top 1 fdj from @t where fgysbm = n.fgysbm and fcpbm = n.fcpbm order by fsj desc) 最新单价, 
          max(fsl) 最大数量, 
          min(fsl) 最小数量, 
          (select top 1 fsl from @t where fgysbm = n.fgysbm and fcpbm = n.fcpbm order by fsj desc) 最新数量 
    from @t n
    group by fgysbm,fcpbm