akhter86 Ответов: 1

Отображение всех сотрудников


Below is data and query, i want to display all employee from #tbl_employee_Master ,but asd.sal_ID is null from #tbl_assign_Allowance_Deduction


Below is image,in which three employee is coming,but i want to display all five employe
<a href="https://ibb.co/tp9YQ3T"></a>


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

Drop table #tbl_designation  
Drop table #tbl_Type_allowance_Deduction  
Drop table #tbl_assign_Allowance_Deduction  
Drop table #tbl_Employee_Master 


Create Table #tbl_Designation (Designation_ID int, Designation_Name varchar(50));  
CREATE TABLE #tbl_Employee_Master (emp_ID INT,emp_Name Varchar(50),emp_salary int,Designation_ID int,emp_OT int );  
CREATE TABLE #tbl_Type_allowance_Deduction (DA_ID INT,DA_Name Varchar(50), DA_TYPE_ID Varchar(50));  
CREATE TABLE #tbl_assign_Allowance_Deduction (assign_ID INT,EMP_ID int ,DA_ID int, Assign_amt int,Sal_ID int);  
  
Insert into #tbl_Designation values  
(1,'officer'),  
(2,'Executive')  
  
Insert into #tbl_Employee_Master values  
(1001,'Irfan',10000,1,20),  
(1002,'Khan',10500,2,20),  
(1003,'Akhter',1200,1,20) , 
(1004,'Ali',8000,2,20),  
(1005,'Jhain',3300,1,20) 
  
insert into #tbl_Type_allowance_Deduction values  
(1,'Loan','Deduction'),  
(2,'Medical','Allowance'),  
(3,'Rent','Allowance'),  
(4,'Conveyance','Allowance'),  
(5,'Advance','Deduction'),  
(6,'Mobile','Allowance')  
  
insert into #tbl_assign_Allowance_Deduction values  
(111,1001,1,500,111),  
(112,1001,2,500,111),  
(113,1002,3,540,111),  
(114,1003,4,200,null),  
(115,1003,6,400,null)  

 SELECT  (M.Emp_ID) , M.EMp_Name , M.EMP_Salary ,D.Designation_Name as Designation,
       SUM(CASE T.DA_Name  WHEN 'Loan' THEN (ASD.assign_amt)ELSE 0 END) Loan, 
        SUM(CASE T.DA_Name  WHEN 'Advance' THEN (ASD.assign_amt)ELSE 0 END) Advance,
		   SUM(CASE T.DA_Name  WHEN 'Mobile' THEN (ASD.assign_amt)ELSE 0 END) Mobile,
		   	   SUM(CASE T.DA_Name  WHEN 'Conveyance' THEN (ASD.assign_amt)ELSE 0 END) Conveyance,
			   SUM(CASE T.DA_Name  WHEN 'Medical' THEN (ASD.assign_amt)ELSE 0 END) Medical,
			      SUM(CASE T.DA_Name  WHEN 'Rent' THEN (ASD.assign_amt)ELSE 0 END) House_Rent,
isnull(M.emp_OT,0) as emp_OT
,0 'txtpresent', 0 'txtabsent',0 'txtsalary',0 'lbOT_Amount',0'txthour',asd.Sal_ID
FROM #tbl_Employee_Master M
 inner join #tbl_designation D on D.Designation_ID=M.Designation_ID
   left   join #tbl_assign_Allowance_Deduction ASD on asd.Emp_ID=M.Emp_ID
   left outer join #tbl_Type_allowance_Deduction T on T.DA_ID=ASD.DA_ID
where asd.sal_ID is null
 group by M.Emp_ID,M.EMp_Name,M.EMP_Salary,D.Designation_Name,M.emp_OT,asd.Sal_ID

OriginalGriff

И что же?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Что вы пытались исправить?
Есть ли какие-либо сообщения об ошибках?
Где ты застрял?
Какая помощь вам нужна?

Вы уже задали 26 вопросов и знаете, что нам нужно от вас узнать.
Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

akhter86

я попробовал ниже запрос ,много раз изменить
Выберите (M. Emp_ID) , M. EMp_Name , M. EMP_Salary ,D. Designation_Name в качестве обозначения,
Сумма(случай т. DA_Name когда 'кредит', то (АСД.assign_amt)иначе 0 конец) Займ,
Сумма(случай т. DA_Name, когда "предварительная", затем (АСД.assign_amt)иначе 0 конец) заранее,
Сумма(случай т. DA_Name, когда "мобильный" тогда (АСД.assign_amt)иначе 0 конец) мобильный,
Сумма(случай т. DA_Name для 'перевозки' тогда (АСД.assign_amt)иначе 0 конец) перевозки,
Сумма(случай т. DA_Name когда 'медицинский' тогда (АСД.assign_amt)иначе 0 конец) медицинской,
SUM(CASE T. DA_Name WHEN 'Rent' THEN (ASD.assign_amt)ELSE 0 END) House_Rent,
isnull(M. emp_OT,0) as emp_OT
,0 'txtpresent', 0 'txtabsent',0 'txtsalary',0 'lbOT_Amount',0'txthour',asd.Sal_ID
От #tbl_Employee_Master M
внутреннее соединение #tbl_designation D на D. Designation_ID=M. Designation_ID
левое соединение #tbl_assign_Allowance_Deduction АСД в АСД.Идентификатор Emp_id=Код Emp_id М.
левое внешнее соединение #tbl_Type_allowance_Deduction T on T. DA_ID=ASD.DA_ID
где АСД.sal_ID имеет значение null
группа по M. Emp_ID,M. EMp_Name,M. EMP_Salary,D. Designation_Name,M. emp_OT,asd.Sal_ID

OriginalGriff

С риском повториться:

И что же?
Что он делает такого, чего вы не ожидали, или не делает того, что вы сделали?
Что вы пытались исправить?
Есть ли какие-либо сообщения об ошибках?
Где ты застрял?
Какая помощь вам нужна?

Вы уже задали 26 вопросов и знаете, что нам нужно от вас узнать.
Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

akhter86

привет OrigingalGriff,

В настоящее время запрос,который я предоставил выше, извлекает того сотрудника, который asd.sal_Id равен null,

Я пытался использовать другое соединение,но результат, которого я ожидаю, не приходит.

Там нет никаких сообщений об ошибках

Я застрял ,что мой ожидаемый результат не приходит.

Мне нужна помощь ,чтобы восстановить всех сотрудников, с условием asd.sal_id равен нулю

1 Ответов

Рейтинг:
12

Maciej Los

ахтер86 писал:
В настоящее время запрос,который я предоставил выше, извлекает того сотрудника, который asd.sal_Id равен null,

Я пытался использовать другое соединение,но результат, которого я ожидаю, не приходит.

Там нет никаких сообщений об ошибках

Я застрял ,что мой ожидаемый результат не приходит.

Мне нужна помощь ,чтобы восстановить всех сотрудников, с условием asd.sal_id равен нулю


Внимательно изучите свои исходные данные!

insert into @tbl_assign_Allowance_Deduction values  
(111,1001,1,500,111),  
(112,1001,2,500,111),  
(113,1002,3,540,111),  
(114,1003,4,200,null),  
(115,1003,6,400,null)  


EmpId=1001 и 1002 имеет Sal_id равно 111. Вот почему вы не получаете эти данные в своих выходных данных.

Вы можете проверить это с помощью простого запроса:
SELECT  M.Emp_ID , M.EMp_Name , M.EMP_Salary ,D.Designation_Name as Designation, T.DA_Name, ASD.assign_amt, isnull(M.emp_OT,0) as emp_OT, asd.Sal_ID
FROM @tbl_Employee_Master M
inner join @tbl_designation D on D.Designation_ID=M.Designation_ID
left join @tbl_assign_Allowance_Deduction ASD on asd.Emp_ID=M.Emp_ID
left join @tbl_Type_allowance_Deduction T on T.DA_ID=ASD.DA_ID


Если вы хотите обратиться DA_Name поля строк в столбцы можно использовать PIVOT - SQL Server | Microsoft Docs[^]

SELECT Emp_ID , EMp_Name , EMP_Salary, Sal_ID, emp_OT, Designation, [Loan], [Advance], [Mobile], [Conveyance], [Medical], [Rent]
	, EMP_Salary + ISNULL([Loan], 0) + ISNULL([Advance], 0) + ISNULL([Mobile], 0) + ISNULL([Conveyance], 0) + ISNULL([Medical], 0) + ISNULL([Rent], 0) AS TotalSalary
FROM (
	SELECT  M.Emp_ID , M.EMp_Name , M.EMP_Salary ,D.Designation_Name as Designation, T.DA_Name, ASD.assign_amt, isnull(M.emp_OT,0) as emp_OT, asd.Sal_ID
	FROM @tbl_Employee_Master M
	inner join @tbl_designation D on D.Designation_ID=M.Designation_ID
	left join @tbl_assign_Allowance_Deduction ASD on asd.Emp_ID=M.Emp_ID
	left join @tbl_Type_allowance_Deduction T on T.DA_ID=ASD.DA_ID
) DT 


Результат:
Emp_ID	EMp_Name	EMP_Salary	Sal_ID	emp_OT	Designation	Loan	Advance	Mobile	Conveyance	Medical	Rent	TotalSalary
1001	Irfan	10000	111	20	officer	500	NULL	NULL	NULL	500	NULL	11000
1002	Khan	10500	111	20	Executive	NULL	NULL	NULL	NULL	NULL	540	11040
1003	Akhter	1200	NULL	20	officer	NULL	NULL	400	200	NULL	NULL	1800
1004	Ali	8000	NULL	20	Executive	NULL	NULL	NULL	NULL	NULL	NULL	8000
1005	Jhain	3300	NULL	20	officer	NULL	NULL	NULL	NULL	NULL	NULL	3300