Ribha Shakoor Ответов: 1

Возвращает несколько значений из запроса, но подзапрос не разрешен.


я нашел решение использовать top 1 в запросе, но он возвращает только одно верхнее значение. Я знаю, что переменная хранит только одно значение, но я не могу найти другого способа сделать это.
Вот моя хранимая процедура
пожалуйста помочь.
Table 1: dbo.tblEmpDetail (Name varchar(30), BasicPay int, ScaleID int)

Table 2: dbo.tblAllowance (Name varchar(30), Amount int, ScaleID int)

Table 3: dbo.tblDeduction (Name varchar(30), Amount int, ScaleID int)



  alter proc Test
as
begin
/*Tax cal variable*/
/*AllowanceDeduction cal vairable*/
declare @totaldeduc int,
 @totalAllowance int,
 @grosspay int
set @totaldeduc = ( select sum(Amount) from tblAllowance A
					   inner join tblEmpOfficialDetail O on O.ScaleID=A.ScaleID
					   group by A.ScaleID, O.EmpID) 
set @totalAllowance= ( select sum(Amount) from tblDeduction A
						  inner join tblEmpOfficialDetail O on O.ScaleID=A.ScaleID
						  group by A.ScaleID, O.EmpID)
set @grosspay= (select O.BasicPay from tblEmpOfficialDetail O 
					inner join tblAllowance A on A.ScaleID=O.ScaleID
					inner join tblDeduction D on D.ScaleID=O.ScaleID
					group by o.ScaleID,o.EmpID, O.BasicPay )+@totaldeduc-@totalAllowance
select @grosspay
end
Execute Test


Что я уже пробовал:

Я пытаюсь рассчитать валовую заработную плату всех сотрудников, добавляя надбавки [dbo.tblAllowances] и вычитая вычеты [dbo.Deductions] против конкретного ранга сотрудника из базовой заработной платы [dbo.EmpDetails] сотрудника.

Suvendu Shekhar Giri

Ошибка имеет смысл, и она работает таким образом по какой-то причине. Каково именно ваше требование?
Пожалуйста, объясните немного больше о вашем требовании, и мы постараемся предложить вам подходящее приложение.

Ribha Shakoor

Проверьте это сейчас пожалуйста

1 Ответов

Рейтинг:
2

The Praveen Singh

Используйте временные таблицы для достижения своей цели какой-то другой метод также доступен, но это легко..

Create Table #Temp
(
Sn                      INT IDENTITY,
EmpId                   int,
Name                    Varchar(150),
totaldeduc              decimal(10,2),
totalAllowance          decimal(10,2),
basicpay                decimal(10,2),
grosspay                decimal(10,2)
)
insert into #temp(EmpId)
select EmpId from tblEmpDetail

Update #temp set
totaldeduc=(select sum(Amount) from tblAllowance where EmpId=#temp.EmpId),
totalAllowance=(select sum(Amount) from tblDeduction where EmpId=#temp.EmpId),
basicpay=(select BasicPay from tblEmpOfficialDetail where EmpId=#temp.EmpId)

Update #Temp set grosspay=(basicpay+totalAllowance-totaldeduc)

Select * from #Temp
Drop table #Temp



Я полагаю, что во всем вашем столе присутствует Эмпид.