日期:2014-05-17  浏览次数:20417 次

求一个简单存储过程
原表数据
select a.Number400,a.FeeType, a.FixedFee,a.FeeTypeName,a.Fee1,a.Fee2,a.Fee3,a.Fee4,
b.Consumer1,b.Consumer2,b.Consumer3,b.Consumer4

from S_SaleManager  a left join S_MonthlyData b
on b.Number400=a.Number400 and b.FeeType=a.FeeType

通过表关联  我得到如下

上面的S_SaleManager是销售表S_MonthlyData是月份表
我要在这个基础上再做一些操作,如果a.FEETYPE值
等于1的话 就a.FEE1*b.Consumer1+a.FEE2*b.Consumer2
等于2的话 就a.FEE3*b.Consumer3+a.FEE4*b.Consumer4
在判断这个值是否大于FixedFeed
如果大于这个值就显示他本身的值 如果不大于这个值  就显示FixedFee的值 然后赋值给一个新的字段 应收总金额
最终我要的这些字段
400号码     CP计算方式  消费抵消  市话单价 长话单价 移动铁通单价,联通电信单价,
市话  长话   移动铁通   联通电信  应收总金额
sql select

------解决方案--------------------
直接把sql丢到sp里就可以啦 
------解决方案--------------------
首先,我把你的语句适当的简化了一下:
select a.Number400,a.FeeType, a.FixedFee,a.FeeTypeName,a.Fee1,a.Fee2,a.Fee3,a.Fee4,
b.Consumer1,b.Consumer2,b.Consumer3,b.Consumer4,

case when a.FeeType = 1 and a.Fee1*b.Consumer1+a.Fee2*b.Consumer2 > a.FixedFee)
          then a.Fee1*b.Consumer1+a.Fee2*b.Consumer2
          
     when a.FeeType = 2 and a.Fee3*b.Consumer3+a.Fee4*b.Consumer4 > a.FixedFee)
          then a.Fee3*b.Consumer3+a.Fee4*b.Consumer4
          
     else a.FixedFee
end
from S_SaleManager  a 
left join S_MonthlyData b
       on b.Number400=a.Number400 
          and b.FeeType=a.FeeType


然后改造成存储过程后是:

create procedure proc_testing(@Month int)
as

select a.Number400,a.FeeType, a.FixedFee,
       a.FeeTypeName,a.Fee1,a.Fee2,a.Fee3,a.Fee4,
b.Consumer1,b.Consumer2,b.Consumer3,b.Consumer4,

case when a.FeeType = 1 
          and a.Fee1*b.Consumer1+a.Fee2*b.Consumer2 > a.FixedFee
          then a.Fee1*b.Consumer1+a.Fee2*b.Consumer2
          
     when a.FeeType = 2 
          and a.Fee3*b.Consumer3+a.Fee4*b.Consumer4 > a.FixedFee