以前写的一个算成本的,算法好像是加权平均的,你看看吧部分表结构CREATE TABLE [dbo].[xxx] (
[pssheetno] [char] (15) COLLATE Chinese_PRC_BIN NOT NULL ,--采购单号
[product] [char] (8) COLLATE Chinese_PRC_BIN NOT NULL ,商品编号
[pus_specs] [char] (10) COLLATE Chinese_PRC_BIN NOT NULL ,
[price] [decimal](8, 2) NOT NULL , --进货价格
[pus_cost] [decimal](10, 4) NOT NULL ,
[fa_cost] [decimal](10, 4) NOT NULL ,--财务成本
[pus_amt] [decimal](7, 2) NULL ,--进货数量
[spec_dis] [decimal](4, 2) NULL ,--特别折扣
[normal_dis] [decimal](4, 2) NULL ,--正常折扣
[commission] [decimal](7, 2) NULL ,商品回拥
[promo_sum] [decimal](7, 2) NULL ,--特价优惠额
[promo_way] [bit] NOT NULL ,--优惠方式
[pur_tax] [decimal](4, 2) NULL ,--进项税率
[sale_tax] [decimal](4, 2) NULL ,--销项税率
[saleprice] [decimal](9, 2) NULL ,--销售价格

) ON [PRIMARY]
GO
@arc
1-经销商品
2-代销商品
3-代理商品
4-物料商品
CREATE procedure tt
(@purprice numeric (8,2),@normaldis numeric(4,2),@specdis numeric(4,2),@commision numeric(7,2),
 @promosum numeric(7,2),@promoway bit,@arc tinyint,@purcost numeric(10,4) output)
  with recompile,encryption
as
select @purprice=isnull(@purprice,0)
select @normaldis=isnull(@normaldis,0)
select @specdis=isnull(@specdis,0)
select @commision=isnull(@commision,0)
select @promosum=isnull(@promosum,0)
select @promoway=isnull(@promoway,1)
select @arc=isnull(@arc,1)
if @arc>4 
begin
   raiserror("错误算法标志",16,1)
   return
end
select @promoway=isnull(@promoway,1)
if @promoway=0 
  begin
    if @arc=1
begin
select @purcost=(@purprice*(1-@normaldis/100-@specdis/100)-@commision)-@promosum
end
    if @arc=2
        begin
 select @purcost=(@purprice*(1-@normaldis/100)*(1-@specdis/100)-@commision)-@promosum
end
    if @arc=3
begin
         select @purcost=(@purprice-@commision)*(1-@normaldis/100-@specdis/100)-@promosum
end
    if @arc=4
begin
         select @purcost=(@purprice-@commision)*(1-@normaldis/100)*(1-@specdis/100)-@promosum
end
  return
  end
else
  begin
    if @arc=1
begin
         select @purcost=(@purprice*(1-@normaldis/100-@specdis/100)-@commision)*(1-@promosum/100)
end
    if @arc=2
begin
         select @purcost=(@purprice*(1-@normaldis/100)*(1-@specdis/100)-@commision)*(1-@promosum/100)
end
    if @arc=3
begin
         select @purcost=(@purprice-@commision)*(1-@normaldis/100-@specdis/100)*(1-@promosum/100)
end
    if @arc=4
begin
         select @purcost=(@purprice-@commision)*(1-@normaldis/100)*(1-@specdis/100)*(1-@promosum/100)
end
  return
end