日期:2014-05-18  浏览次数:20669 次

参数与公式的问题
SQL code

declare @SMM_Pb1  numeric(15,2) 
declare @SMM_Pb2  numeric(15,2) 
select @SMM_Pb1=15575
select @SMM_Pb2=22
select FArea,FName,@SMM_Pb1,FWebPrice from IB_PRICEFORMULA

=>结果        (我把变量做为公式写到记录了FWebPrice字段的值为@SMM_Pb1,因为@SMM_Pb1是从别的表获取的,还有什么方法设置这样的公式,FWebPrice字段的值也可能设置为@SMM_Pb2) 
FArea  FName    @SMM_Pb1        FWebPrice 
地区A    A    15575.00    @SMM_Pb1
=>想得到的结果
FArea  FName    @SMM_Pb1        FWebPrice 
地区A    A    15575.00    15575.00

1.如上想得知正确的结果, 怎么写?
2.假如有列FWebPriceA,FWebPriceB,FWebPriceC,
FWebPriceA的公式是FWebPrice*3 
FWebPriceB的公式是FWebPriceA/2
FWebPriceC的公式是FWebPriceB+10
该怎么写SQL?declare @SMM_Pb1  numeric(15,2) 
declare @SMM_Pb2  numeric(15,2) 
select @SMM_Pb1=15575
select @SMM_Pb2=22
select FArea,FName,@SMM_Pb1,FWebPrice from IB_PRICEFORMULA

=>结果        (我把变量做为公式写到记录了FWebPrice字段的值为@SMM_Pb1,因为@SMM_Pb1是从别的表获取的,还有什么方法设置这样的公式,FWebPrice字段的值也可能设置为@SMM_Pb2) 
FArea  FName    @SMM_Pb1        FWebPrice 
地区A    A    15575.00    @SMM_Pb1
=>想得到的结果
FArea  FName    @SMM_Pb1        FWebPrice 
地区A    A    15575.00    15575.00

1.如上想得知正确的结果, 怎么写?
2.假如有列FWebPriceA,FWebPriceB,FWebPriceC,
FWebPriceA的公式是FWebPrice*3 
FWebPriceB的公式是FWebPriceA/2
FWebPriceC的公式是FWebPriceB+10
该怎么写SQL? 不要一直镶套的方式,因为列很多



------解决方案--------------------
SQL code


create table #tb(FName varchar(10) , FWebPrice varchar(10))
insert into #tb values('地区A','@SMM_Pb1')
insert into #tb values('地区B','@SMM_Pb2')

declare @sql varchar(8000)
declare @SMM_Pb1  numeric(15,2) 
declare @SMM_Pb2  numeric(15,2) 
select @SMM_Pb1=11
select @SMM_Pb2=22
set @sql=''

 select @sql=@sql+' when FWebPrice='
             +quotename(FWebPrice,'''')+' then '+FWebPrice from #tb
set  @sql='select FName,case '+@sql+' end as FWebPrice from #tb'
print @sql
exec('declare @SMM_Pb1  numeric(15,2) 
declare @SMM_Pb2  numeric(15,2) 
select @SMM_Pb1=11
select @SMM_Pb2=22 '+@sql)
 
 
 /*
 FName    FWebPrice
地区A    11.00
地区B    22.00
 */



动态