表名:所有采购记录(ID,物料编号,单价,金额,日期.)
要求输入日期范围.得出
年度,月份,材料编号,数量,节约金额,基准价格
单个物料基准价格计算方法:
1:对于当年1月1日前发生过入库的物料
  单个物料基准价格=当年1月1日前此物料最后一次入库价格
2:对于当年1月1日前未发生过入库的物料
  单个物料基准价格=当年此物料第一次入库价格
================================
大家帮帮忙!

解决方案 »

  1.   


    select year(日期)年度,month(日期)月份,物料编号,sum(数量)数量,
    节约金额 = 0,
    基准价格 = isnull( 
    (select top 1 单价 from tb where year(日期)<year(t.日期) and 物料编号=t.物料编号 order by 日期 desc),
    (select top 1 单价 from tb where year(日期)=year(t.日期) and 物料编号=t.物料编号 order by 日期 )
    )  
    from tb 
    group by year(日期),month(日期),物料编号
      

  2.   

    你的意思是按照每种物料的第一次的采购金额为准?
    最好给出完整的表结构,测试数据,计算方法和正确结果.发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  3.   

    这个有结果吗
    select year(日期)年度,month(日期)月份,物料编号,sum(数量)数量,
    节约金额 = sum(数量)*(isnull( 
    (select top 1 单价 from tb where year(日期)<year(t.日期) and 物料编号=t.物料编号 order by 日期 desc),
    (select top 1 单价 from tb where year(日期)=year(t.日期) and 物料编号=t.物料编号 order by 日期 )
    )- 金额),
    基准价格 = isnull( 
    (select top 1 单价 from tb where year(日期)<year(t.日期) and 物料编号=t.物料编号 order by 日期 desc),
    (select top 1 单价 from tb where year(日期)=year(t.日期) and 物料编号=t.物料编号 order by 日期 )
    )  
    from tb 
    group by year(日期),month(日期),物料编号
      

  4.   

    谢谢xys_777朋友.
    我先试试.不过还有个问题要考虑,就是可能一个物料同时有两个供应商供货.那需要把这两个供应商的最后一次采购价取平均值作为基准价格.
      

  5.   

    谢谢xys_777朋友.可以得出结果.但是还要考虑一个物料同时有两个供应商供货.那需要把这两个供应商的最后一次采购价取平均值作为基准价格.这个怎么改呢?