Надо создать отчет типа учет рабочего времени
Модераторы: Naeel Maqsudov, C_O_D_E
UNION в SQL запросе тебе поможет.
Даже самый дурацкий замысел можно воплотить мастерски
Боюсь, что надо заморочится с хранимой процедурой (не знаю только какая СУБД), которая для каждого входа находит следующий за ним выход и в дальнейшем запросе подставит его в соответствующее поле.
А может просто предложить отчет в таком виде
CARD=25
ВХОД: 8.00
ВЫХОД:10.34
ВХОД:15.16
ВЫХОД: 18.01
А может просто предложить отчет в таком виде
CARD=25
ВХОД: 8.00
ВЫХОД:10.34
ВХОД:15.16
ВЫХОД: 18.01
Можно попробовать следующим образом:
сначала в хранимой процедуре создать временную таблицу, в которую скинуть все необходимые данные и из нее уже строить отчет.
временная таблица выглядит как необходимо, то есть столбцы - вход, выход, время.
еще желательно в эту таблицу добавить даты этих событий, чтобы по ним отсортировать записи в нужном порядке
сначала в хранимой процедуре создать временную таблицу, в которую скинуть все необходимые данные и из нее уже строить отчет.
временная таблица выглядит как необходимо, то есть столбцы - вход, выход, время.
еще желательно в эту таблицу добавить даты этих событий, чтобы по ним отсортировать записи в нужном порядке
В таком случае функция будет выглядеть как-то так (не имею возможности сейчас проверить синтаксис):
CREATE FUNCTION f_getExit(@cardNum number,@enter Date)
RETURNS DATE
AS
RETURN SELECT MIN(EVENTS_TIME) FROM Таблица
WHERE CARD=@cardNum
and STATUS='2'
and EVENTS_TIME>=@enter
И далее запрос:
SELECT CARD as CARD, EVENTS_TIME as ENTER, f_getExit(CARD, EVENTS_TIME) as EXIT
FROM Таблица
WHERE
STATUS='1'
AND CARD=номер_карты
CREATE FUNCTION f_getExit(@cardNum number,@enter Date)
RETURNS DATE
AS
RETURN SELECT MIN(EVENTS_TIME) FROM Таблица
WHERE CARD=@cardNum
and STATUS='2'
and EVENTS_TIME>=@enter
И далее запрос:
SELECT CARD as CARD, EVENTS_TIME as ENTER, f_getExit(CARD, EVENTS_TIME) as EXIT
FROM Таблица
WHERE
STATUS='1'
AND CARD=номер_карты
только функция будет вот так правильней:
CREATE FUNCTION f_getExit(@cardNum number,@enter Date)
RETURNS DATE
AS
BEGIN
DECLARE @NeedDate DATE
SELECT MIN(EVENTS_TIME) FROM Таблица
WHERE CARD=@cardNum
and STATUS='2'
and EVENTS_TIME>=@enter;
RETURN @NeedDate
END
а вообще должно получиться
посмотрим что ответит OlegK
CREATE FUNCTION f_getExit(@cardNum number,@enter Date)
RETURNS DATE
AS
BEGIN
DECLARE @NeedDate DATE
SELECT MIN(EVENTS_TIME) FROM Таблица
WHERE CARD=@cardNum
and STATUS='2'
and EVENTS_TIME>=@enter;
RETURN @NeedDate
END
а вообще должно получиться
посмотрим что ответит OlegK
прошу прощения, забыл дописать:
в строке где стоит select будет так:
SELECT @NeedDate = MIN(EVENTS_TIME) FROM Таблица
в строке где стоит select будет так:
SELECT @NeedDate = MIN(EVENTS_TIME) FROM Таблица
Я бы к исходной таблице добавил бы identity колонку и строил простой запрос с join'ом таблицы саму на себя.
Даже самый дурацкий замысел можно воплотить мастерски