Оценить выражение на сервере SQL - PullRequest
0 голосов
/ 21 октября 2019

У меня есть таблица SQL, подобная следующей:

link

Здесь столбцы Basic и HouseRent имеют тип varchar. Я хочу вычислить Basic и HouseRent из expression. Gross и Medical уже имеют значение.

Я попробовал следующий SQL, но он показывает

Неверное имя столбца GrossSalary и 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)'

Ответы [ 4 ]

0 голосов
/ 21 октября 2019

Пожалуйста, попробуйте следующий запрос

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
0 голосов
/ 21 октября 2019

Попробуйте это:

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
0 голосов
/ 21 октября 2019

Возможно, вы захотите попробовать вот так ( протестировано в скрипте SQL 2017 ):

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);
0 голосов
/ 21 октября 2019

Если я правильно понял, вы хотите вычислить столбцы Basic и HouseRent

Если формула не меняется, я предлагаю создать еще 2 столбца: первое BasicValue и второе HouseRentValue

и вы можете заполнить этот 2 столбец с помощью этого сценария

Обновление вашей таблицы set BasicValue = (GrossSalary - Medical) / Convert (Decimal (4,2), Right (basic, 3)) set HouseRentValue = Basic * Convert(Десятичное число (4,2), справа (HouseRent, 3))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...