Как различить 1-ю таблицу, суммировать и объединить 2-ю таблицу, которая, если не совпадает между T1 и T2, добавляет новую строку - PullRequest
0 голосов
/ 21 сентября 2019

Как объединить 1-ую отдельную таблицу, суммировать и объединить 2-ю таблицу, которая, если не совпадает между T1 и T2, добавляет новую строку

enter image description here

enter image description here

Результат мне нужен

  • Период в таблице результатов - Getdate ()

enter image description here

Select distinct(y.Emp_ID),x.MealAllowance_OT from [dbo].[SPCM_TX_MonthlyAllowance] y left join 
  (Select x.Emp_Id,x.MealAllowance_OT from [dbo].[SPCM_Cal_OTLog] x
   group by x.Emp_Id,x.MealAllowance_OT) x
on x.Emp_Id = y.Emp_ID
order by x.MealAllowance_OT desc

1 Ответ

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

Вы должны использовать подзапрос на T2, чтобы получить суммы по группам.Затем вы внешне соединяетесь с T1, чтобы включить несовпадающие строки.Я догадался по математике и по умолчанию.Например, почему Pay / MealAllowance считается равным 400, если в T1 нет записи.

declare @T1 table (Emp_Id int, TRA varchar(3), Pay int)
declare @T2 table (Emp_Id int, DayTy varchar(3), MealAllowance int)

insert into @T1
values (1,'DL',400),(2,'IDL',400),(5,'IDL',400)

insert into @T2
values (1,'DL',18),(2,'IDL',136),(2,'IDL',136),(4,'IDL',136)

select isnull(T1.Emp_Id,T2.Emp_Id) Emp_Id,isnull(T1.TRA,T2.DayTy) DayTY
   ,isnull(Pay,400) MealAllowance_Mont, isnull(MealAllowance,0) MealAllowance
   ,isnull(Pay,400) + isnull(MealAllowance,0) Tot, getdate() period
from @T1 T1
full outer join
(
   select Emp_Id, DayTy,sum(MealAllowance) MealAllowance
   from @T2
   group by Emp_Id, DayTy
) T2
   on T1.Emp_Id = T2.Emp_Id
   and T1.TRA = T2.DayTy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...