Хранимая процедура для расчета общего количества рабочих часов с несколькими входами/выходами.
Ищете хранимую процедуру для расчета общего рабочего времени сотрудников с несколькими входами и выходами
Структура таблицы
Id-первичный let
EmpCode - код сотрудника
Статус-вход/выход
ActionDatetime - DateTime
Образец записи
1 emp100 IN 2017-05-18 10:00 2 emp100 OUT 2017-05-18 15:00 3 emp100 IN 2017-05-18 17:00 4 emp100 OUT 2017-05-18 20:00 5 emp102 IN 2017-05-18 06:00 6 emp102 OUT 2017-05-18 10:00 7 emp103 IN 2017-05-18 07:00 8 emp103 IN 2017-05- 18 10:00
Я должен пробовать данные, как описано выше.
Я хочу запустить хранимую процедуру с датой.
Это должно дать такой результат.
1. список кодов сотрудников без повторения кода сотрудников ( код сотрудников не может повторяться в строках)
2. Все и для всех сотрудников, как.
1. Emp100 IN 2017-05-18 10: 00 OUT 2017-05-18 15: 00 IN 2017-05-18 17: 00 OUT 2017-05-18 20: 00 (всего часов )
Если какой-либо вход или выход пропущен для бывших сотрудников, нечетные числа входов и выходов. Также продолжается та же последовательность того же статуса in In также начало дня с out without in it должно отображаться в последних Столбцах в виде замечаний.
Эта работа была опубликована с мобильного устройства, поэтому, пожалуйста, простите за любые опечатки или недостающие детали.
Что я уже пробовал:
USE [test] GO /****** Object: StoredProcedure [dbo].[GetWorkingHours] Script Date: 19-05-2017 12:07:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[GetWorkingHours] @Day date AS BEGIN SET NOCOUNT ON; with EmpIn as ( select row_number() over (order by [Date]) RowNum, [Date] as 'Date', EmpId as 'EmpId' from EmpLog (nolock) where cast([Date] as date) = @Day and [Status] LIKE '%IN%' ), EmpOut as ( select row_number() over (order by [Date]) RowNum, [Date] as 'Date', EmpId as 'EmpId' from EmpLog (nolock) where cast([Date] as date) = @Day and [Status] LIKE '%OUT%' ) select e1.EmpId as 'EmpId', e1.Date as 'In', e2.Date as 'Out', datediff(MINUTE, e1.[Date], e2.[Date]) as 'TotalHours' from EmpIn e1 full outer join EmpOut e2 on e1.RowNum = e2.RowNum end
CHill60
Игнорируя тот факт, что это должна быть хранимая процедура, какие запросы вы написали, чтобы попытаться получить эту информацию?
Если у вас буквально "нет идеи..." о том, как действовать дальше, тогда вы не поймете ничего из того, что мы вам дадим. Кстати мы не занимаемся написанием кода
Member 13210334
Используйте [тест]
ГО
/ * * * * * * Объект: StoredProcedure [dbo].[GetWorkingHours] Дата Написания Сценария: 19-05-2017 12: 07:55 ******/
УСТАНОВИТЕ ANSI_NULLS ON
ГО
УСТАНОВИТЕ QUOTED_IDENTIFIER НА
ГО
Изменить процедуру [dbo].[GetWorkingHours]
@День дата
АС
НАЧАТЬ
УСТАНОВИТЕ NOCOUNT ON;
с EmpIn как (
выберите row_number () over (order by [Date]) Параметр rownum, [дата], так как "дата", empid в качестве 'empid в'
от EmpLog (nolock)
где cast ([Date] as date) = @Day и [Status] LIKE ' %IN%'
),
Эмпаут как (
выберите row_number () over (order by [Date]) Параметр rownum, [дата], так как "дата", empid в качестве 'empid в'
от EmpLog (nolock)
где cast ([Date] as date) = @Day и [Status] LIKE '%OUT%'
)
выбирать
Е1.Empid в качестве 'empid в',
e1. дата как "в",
e2. дата как "выход",
datediff(минута, e1. [дата], e2. [дата]) как "TotalHours"
от EmpIn e1
полное внешнее соединение EmpOut e2 на e1.RowNum = e2. RowNum
конец
Christian Luketa Kanyinda
Привет,
Пожалуйста, постарайтесь лучше указать структуру таблицы.
Что вы подразумеваете под этой записью: emp100 в 2017-05-18 10: 00
В нем есть колонны ?
emp100 & 2017-05-18 10: 00 тоже