在 SQL 服务器中计算表达式

Evaluate Expression in SQL server

我有一个SQLtable像下图

此处BasicHouseRent列是varchar类型。我想从 expression 计算 BasicHouseRentGrossMedical 已经有了值。

我尝试了以下 SQL 但它显示

Invalid column name GrossSalary and Medical

Create table #Results (ID int,Value varchar(max))
Declare @SQL varchar(max)=''
Select @SQL = @SQL+concat(',(',PolicyId,',cast(',Basic,' as varchar(max)))')From ProllSalaryPolicy
Select @SQL = 'Insert Into #Results Select * From ('+Stuff(@SQL,1,1,'values')+') N(ID,Value)'

如果我没理解错你想计算 Basic 和 HouseRent 列

如果公式没有改变,我建议再创建 2 个列: 第一个 BasicValue 和第二个 HouseRentValue

您可以使用此脚本填写这 2 列

更新你的桌子 设置 BasicValue = (GrossSalary - Medical) / Convert(Decimal(4,2),Right(basic,3)) set HouseRentValue = Basic * Convert(Decimal(4,2),Right( HouseRent,3))

试试这个:

create table ProllSalaryPolicy (
  PolicyId int not null,
  GrossSalary int,
  Medical int,
  Basic varchar(512),
  HouseRent varchar(512)
)

insert into ProllSalaryPolicy values(1, 13100, 1450,'(GrossSalary-Medical)/1.5', 'Basic*0.4')
insert into ProllSalaryPolicy values(3, 13100, 1450,'(GrossSalary-Medical)/1.4', 'Basic*0.5')

Create table #Results (ID int,Value varchar(max))
Declare @SQL varchar(max)=''

Select @SQL  = @SQL+' Insert Into #Results(Id, Value) Select '+cast(PolicyId as varchar(50))+', '+Replace(HouseRent,'Basic',Basic)+' FROM ProllSalaryPolicy where PolicyId = '+cast(PolicyId as varchar(50)) from ProllSalaryPolicy 

exec (@sql)

select * from #Results

drop table #Results

drop table ProllSalaryPolicy

你可能想尝试这样 (tested in SQL 2017 fiddle):

Create table prollSalaryPolicy 
(ID int, 
GrossSalary float, 
Medical float, 
BasicExpression varchar(1000) 
);

Create table #Results (ID int,Value varchar(max));
Insert into prollSalaryPolicy (id, GrossSalary, Medical, BasicExpression)
values
(1, 13000,1400,'(GrossSalary-Medical)/1.5')
Declare @SQL varchar(max)='';
Select @SQL = @SQL + CONCAT (cast(id as varchar(3)),', ', BasicExpression) from prollSalaryPolicy;
Print @SQL;
select @SQL = 'Insert into #Results (ID, Value) select ' + @SQL + ' from  prollSalaryPolicy'
Print @SQL;
exec (@SQL);

请尝试以下查询

Create Table #Sal (PolicyId varchar(10),GrossSalary float,Medical Float,Basic Varchar(1000),HouseRent varchar(100))
insert into #Sal

Values(1,13300,1450,'(GrossSalary-Medical)/1.5','Basic*0.4')
,(3,13100,1450,'(GrossSalary-Medical)/1.4','Basic*0.5')
select * from #Sal
Declare @Qry nvarchar(max)='select t1.PolicyId,sum(t1.GrossSalary),Sum(t1.Medical)
,Sum((t1.GrossSalary-t1.Medical)/1.5) from #Sal t1
Group by t1.PolicyId'

Exec sp_executeSql @Qry