Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом... Не знаю как написать  [new]
фавафафаф
Member

Откуда:
Сообщений: 1
Есть таблица (верхняя на рисунке)


Нужно составить запрос, чтоб результатом была нижняя таблица на рисунке, т.е. для каждой строки с номером пропуска (Permit_Number) значение времени в строках с пометкой enter станут соответственным столбцом. То же и для exit.

К сообщению приложен файл. Размер - 32Kb
5 июн 14, 23:03    [16129299]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом... Не знаю как написать  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
фавафафаф
Нужно составить запрос
За тыщу рублей могу сделать.
6 июн 14, 04:10    [16129654]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом... Не знаю как написать  [new]
icprog
Member

Откуда:
Сообщений: 166
фавафафаф,

Соедините таблицу саму с собой по нужным вам условиям
6 июн 14, 09:02    [16129946]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом... Не знаю как написать  [new]
Mikle83
Member

Откуда: Санкт-Петербург
Сообщений: 653
фавафафаф,

автор
т.е. для каждой строки с номером пропуска (Permit_Number) значение времени в строках с пометкой enter станут соответственным столбцом.

не верная постановка задачи. Насколько видно по таблице - у вас не однократно возможны варианты "вошел/вышел".
Соответственно в одну строку должны "объединиться" значения "соседних" по времени строк Exit/Enter.

И тут начинается много нюансов, а что делать при таких последовательностей для одного пропуска:
Exit
Exit
Enter

Exit
Enter
Enter

Enter
Exit
Exit

Enter
Enter
Exit

Задача чуть менее чем полностью не раскрыта.
6 июн 14, 10:38    [16130456]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом... Не знаю как написать  [new]
Jaffar
Member

Откуда:
Сообщений: 633
скорее всего задача решается так
select t.Permit_Number, t.Pass_time EnterTime, t2.Pass_time ExitTime
from Table_1 t with(nolock)
outer apply(select top 1 t2.t2.Pass_Time TimeExit
			from Table_1 t2 with(nolock)
			where
					t2.Permit_Number = t.Permit_Number
			and		t2.Pass_Kind = 'exit'
			and		t2.Pass_Time < t.Pass_Time
			order by t2.Pass_Time desc /**/ ) t2
where
		t.Pass_Kind = 'enter'
order by EnterTime asc


вообщем как всегда всем поможет cross apply - просто, нагляднои очень удобно.
6 июн 14, 12:58    [16131781]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить