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

Откуда:
Сообщений: 23
Что-то совсем головушка не соображает, обращаюсь к корифеям SQL.
Имеется таблица, вида:
Период
МестоРаботы
Сотрудник

Надо превратить её в таблицу:
ДатаНачала ДатаЗавершения МестоРаботы Сотрудник

Т.ё. пример, записи в таблице:
01.01.2012 Ларёк №1 Иванов
01.02.2012 Ларёк №2 Иванов
25.02.2012 Ларёк №3 Иванов
01.04.2012 Ларёк №1 Иванов

Должно превратиться в:

01.01.2012 01.02.2012 Ларёк №1 Иванов
02.02.2012 25.02.2012 Ларёк №2 Иванов
25.02.2012 01.04.2012 Ларёк №3 Иванов
01.04.2012 NULL Ларёк №1 Иванов
12 апр 12, 15:39    [12406593]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом таблицу превратить в это....?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Вторая колонка - это
(SELECT TOP(1) TT.МестоРаботы FROM таблица TT WHERE TT.Сотрудник=T.Сотрудник AND TT.Период>T.Период ORDER BY TT.Период)
если ничего не напутал.
В основном запросе алиас у [таблица] - T
12 апр 12, 15:51    [12406717]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом таблицу превратить в это....?  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
IKSparrow,
Так?
select MIN(Дата) as DateBegin, MAX(Дата) as DateEnd, Сотрудник
from Tab
group by Сотрудник
12 апр 12, 15:53    [12406733]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом таблицу превратить в это....?  [new]
Иванов Адам Моисеевич
Guest
IKSparrow
Т.ё. пример, записи в таблице:
01.01.2012 Ларёк №1 Иванов
01.02.2012 Ларёк №2 Иванов
25.02.2012 Ларёк №3 Иванов
01.04.2012 Ларёк №1 Иванов

Должно превратиться в:

01.01.2012 01.02.2012 Ларёк №1 Иванов
02.02.2012 25.02.2012 Ларёк №2 Иванов
25.02.2012 01.04.2012 Ларёк №3 Иванов
01.04.2012 NULL Ларёк №1 Иванов


В период между Ларьком №1 и Ларьком №2 Иванов точно нигде не работал ?
Оформление, как можно полагать, без трудовой ?
Почему Иванов в ларьке №2 реально работал 01.02.2012, а ему записали выход только со 02.02.2012 ?
Что значит многозначительный NULL в конце - что Иванов "доработался" ?

и т.д. и т.п.
12 апр 12, 15:54    [12406745]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом таблицу превратить в это....?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
Попробуйте добавить иванову недельку отпуска и посмотрите что получиться
12 апр 12, 15:58    [12406772]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом таблицу превратить в это....?  [new]
IKSparrow
Member

Откуда:
Сообщений: 23
trew
IKSparrow,
Так?
select MIN(Дата) as DateBegin, MAX(Дата) as DateEnd, Сотрудник
from Tab
group by Сотрудник


Не, ну это вообще чушь получается =)
12 апр 12, 15:59    [12406783]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом таблицу превратить в это....?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Иванов Адам Моисеевич,

NULL - Иванов запутался в ларьках.
Не знает, в какой ему сегодня идти!

NULL - это же UNKNOWN!
12 апр 12, 16:00    [12406787]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом таблицу превратить в это....?  [new]
IKSparrow
Member

Откуда:
Сообщений: 23
Иванов Адам Моисеевич
IKSparrow
Т.ё. пример, записи в таблице:
01.01.2012 Ларёк №1 Иванов
01.02.2012 Ларёк №2 Иванов
25.02.2012 Ларёк №3 Иванов
01.04.2012 Ларёк №1 Иванов

Должно превратиться в:

01.01.2012 01.02.2012 Ларёк №1 Иванов
01.02.2012 25.02.2012 Ларёк №2 Иванов
25.02.2012 01.04.2012 Ларёк №3 Иванов
01.04.2012 NULL Ларёк №1 Иванов


В период между Ларьком №1 и Ларьком №2 Иванов точно нигде не работал ?
Оформление, как можно полагать, без трудовой ?
Почему Иванов в ларьке №2 реально работал 01.02.2012, а ему записали выход только со 02.02.2012 ?
Что значит многозначительный NULL в конце - что Иванов "доработался" ?

и т.д. и т.п.


1. Абсолютно точно - только в указанных местах.
2. Оформление по трудовой.
3. Это ошибка
4. Это значит, что он ещё работает и работает и данных о его следующем ларьке пока нет.
12 апр 12, 16:01    [12406794]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом таблицу превратить в это....?  [new]
Изя Шнапсович
Guest
IKSparrow
trew
IKSparrow,
Так?
select MIN(Дата) as DateBegin, MAX(Дата) as DateEnd, Сотрудник
from Tab
group by Сотрудник


Не, ну это вообще чушь получается =)


А кому какая разница ?
Все равно проблемы с оформлением и учетом работы сотрудников.
месяцем больше-месяцем меньше - им не привыкать.
12 апр 12, 16:05    [12406836]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом таблицу превратить в это....?  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
IKSparrow,

declare @table table (dd smalldatetime, ss varchar(10), es varchar(10))

insert into @table values('20120101', 'Ларёк №1', 'Иванов')
insert into @table values('20120102', 'Ларёк №2', 'Иванов')
insert into @table values('20120225', 'Ларёк №3', 'Иванов')
insert into @table values('20120401', 'Ларёк №1', 'Иванов')

select s1.dd, s2.dd, s1.es, s1.ss 
from
(select *
,ROW_NUMBER () over(order by es) tt1
from @table
) s1 
left join (select *, ROW_NUMBER () over(order by es) tt2
from @table) s2 on s1.tt1+1 = s2.tt2
12 апр 12, 16:13    [12406897]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом таблицу превратить в это....?  [new]
IKSparrow
Member

Откуда:
Сообщений: 23
trew,

Спасибо!
12 апр 12, 16:19    [12406962]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить