Расширенный запрос SQL, необходимо добавить еще одну таблицу и идентификатор сотрудника
Я новичок в продвинутом SQL. У меня есть запрос, который мне нужно добавить переменную. Он должен подключиться к таблице сотрудников и показать только запись для этого конкретного employeeId. Это Outsystems и сложный SQL-запрос. Есть идеи?
Вот что мне нужно добавить: Employee.EmployeeId = EmployeeId или EmployeeId = NullIdentifier()
Существующий запрос, который мне нужно добавить выше, как:
Select
EMPLOYEEDISPLAYNAME ,
ISNULL(Sick.Total,0.00) as SickValue,
ISNULL( Vacation.Total,0.00) as VacationValue
from
{Employee}
left join
( Select
EMPLOYEEID,
Sum( DEPOSITVALUE ) - Sum( WITHDRAWLVALUE ) as Total
from
{TimeOffRegisterEntry}
join {TimeOffRegister}
on {TimeOffRegisterEntry}.TimeOffRegisterId = {TimeOffRegister}.TimeOffRegisterId
join {TimeOffYear}
on {TimeOffRegister}.TimeOffYearId = {TimeOffYear}.TimeOffYearId
where
TIMEOFFTYPE = @VacationType
and {TimeOffYear}.[TimeOffYearId] = @Year
group by
EMPLOYEEID
having
Sum( DEPOSITVALUE ) - Sum( WITHDRAWLVALUE ) < 0
) as Vacation
on {Employee}.EmployeeId = Vacation.EMPLOYEEID
left join
( Select
EMPLOYEEID,
Sum( DEPOSITVALUE ) - Sum( WITHDRAWLVALUE ) as Total
from
{TimeOffRegisterEntry}
join {TimeOffRegister}
on {TimeOffRegister}.TimeOffRegisterId = {TimeOffRegisterEntry}.TimeOffRegisterId
join {TimeOffYear}
on {TimeOffRegister}.TimeOffYearId = {TimeOffYear}.TimeOffYearId
where
TIMEOFFTYPE = @SickType
and {TimeOffYear}.[TimeOffYearId] = @Year
group by
EMPLOYEEID
having
Sum( DEPOSITVALUE ) - Sum( WITHDRAWLVALUE ) < 0
) as Sick
on {Employee}.EmployeeId = Sick.EMPLOYEEID
where
Vacation.total is not null
or Sick.Total is not null
2 ответа
Вам нужно будет добавить новый параметр в запрос (EmployeeId, вероятно, типа EmployeeId Identifier) и добавить условие в ваш запрос.
Не зная вашей полной структуры базы данных:
- Добавляя его только во внешнем состоянии, где должно быть достаточно
- Добавление его во внутренние запросы также может потребоваться / оптимизировать запрос
В конце запрос будет выглядеть примерно так
Select
EMPLOYEEDISPLAYNAME ,
ISNULL(Sick.Total,0.00) as SickValue,
ISNULL( Vacation.Total,0.00) as VacationValue
from
{Employee}
left join
( Select
EMPLOYEEID,
Sum( DEPOSITVALUE ) - Sum( WITHDRAWLVALUE ) as Total
from
{TimeOffRegisterEntry}
join {TimeOffRegister}
on {TimeOffRegisterEntry}.TimeOffRegisterId = {TimeOffRegister}.TimeOffRegisterId
join {TimeOffYear}
on {TimeOffRegister}.TimeOffYearId = {TimeOffYear}.TimeOffYearId
where
TIMEOFFTYPE = @VacationType
and {TimeOffYear}.[TimeOffYearId] = @Year
AND (@EmployeeId = 0 OR EMPLOYEEID = @EmployeeId)
group by
EMPLOYEEID
having
Sum( DEPOSITVALUE ) - Sum( WITHDRAWLVALUE ) < 0
) as Vacation
on {Employee}.EmployeeId = Vacation.EMPLOYEEID
left join
( Select
EMPLOYEEID,
Sum( DEPOSITVALUE ) - Sum( WITHDRAWLVALUE ) as Total
from
{TimeOffRegisterEntry}
join {TimeOffRegister}
on {TimeOffRegister}.TimeOffRegisterId = {TimeOffRegisterEntry}.TimeOffRegisterId
join {TimeOffYear}
on {TimeOffRegister}.TimeOffYearId = {TimeOffYear}.TimeOffYearId
where
TIMEOFFTYPE = @SickType
and {TimeOffYear}.[TimeOffYearId] = @Year
AND (@EmployeeId = 0 OR EMPLOYEEID = @EmployeeId)
group by
EMPLOYEEID
having
Sum( DEPOSITVALUE ) - Sum( WITHDRAWLVALUE ) < 0
) as Sick
on {Employee}.EmployeeId = Sick.EMPLOYEEID
where
(@EmployeeId = 0 OR {Employee}.[EmployeeId] = @EmployeeId)
AND (
Vacation.total is not null
or Sick.Total is not null
)
Ищите ссылки на @EmployeeId в приведенном выше фрагменте кода.
Обратите внимание на AND ( ... или...), заключающий альтернативное условие
Я думаю, что вы должны взглянуть на механизм, предложенный здесь (передача входной переменной и настройка "развернуть"): http://www.outsystems.com/forums/discussion/6103/advanced-query-with-search-parameters/
Форумы для Outsystems - это шрифт знаний! (кредит им!)