Надо создать отчет типа учет рабочего времени

Вопросы по программированию, не подходящие в другие разделы.

Модераторы: Naeel Maqsudov, C_O_D_E

Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

UNION в SQL запросе тебе поможет.
Даже самый дурацкий замысел можно воплотить мастерски
Serafina
Сообщения: 11
Зарегистрирован: 16 ноя 2004, 22:13
Откуда: Питер
Контактная информация:

Боюсь, что надо заморочится с хранимой процедурой (не знаю только какая СУБД), которая для каждого входа находит следующий за ним выход и в дальнейшем запросе подставит его в соответствующее поле.

А может просто предложить отчет в таком виде :wink:

CARD=25
ВХОД: 8.00
ВЫХОД:10.34
ВХОД:15.16
ВЫХОД: 18.01
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

Можно попробовать следующим образом:
сначала в хранимой процедуре создать временную таблицу, в которую скинуть все необходимые данные и из нее уже строить отчет.
временная таблица выглядит как необходимо, то есть столбцы - вход, выход, время.
еще желательно в эту таблицу добавить даты этих событий, чтобы по ним отсортировать записи в нужном порядке
Serafina
Сообщения: 11
Зарегистрирован: 16 ноя 2004, 22:13
Откуда: Питер
Контактная информация:

В таком случае функция будет выглядеть как-то так (не имею возможности сейчас проверить синтаксис):

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=номер_карты
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

только функция будет вот так правильней:
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
AndreykA
Сообщения: 48
Зарегистрирован: 15 ноя 2004, 12:55
Откуда: Москва
Контактная информация:

прошу прощения, забыл дописать:
в строке где стоит select будет так:
SELECT @NeedDate = MIN(EVENTS_TIME) FROM Таблица
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Я бы к исходной таблице добавил бы identity колонку и строил простой запрос с join'ом таблицы саму на себя.
Даже самый дурацкий замысел можно воплотить мастерски
Ответить