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

Откуда:
Сообщений: 257
Добрый день всем.

Помогите, пожалуйста, с запросом

Есть такая структура
create table #Test(Id,Name,ActionTime,Changes)
insert into #Test
(49924797,'Test1','2015-03-02 09:51:02.410','1005 -> 0'),
(34965111,'Test2','2015-03-18 12:33:25.590','1005 -> 0'),
(34965111,'Test2','2015-03-18 12:54:37.907','1005 -> 1'),
(71585064,'Test3','2015-02-26 12:43:02.033','1005 -> 1')

Мне необъходимо получить результат такого вида

Id,Name,[Дата блокировки],[Дата разблокировки]

49924797|Test1|null|2015-03-02 09:51:02.410
34965111|Test2|2015-03-18 12:54:37.907|2015-03-18 12:33:25.590


SELECT Id,name,[Дата блокировки],[Дата разблокировки]
FROM (select Id,name,ActionTime,Changes
#Test) as SourceRa
pivot(Changes for ActionTime in ([Дата блокировки],[Дата разблокировки]) ) AS PivotTable

C PIVOT очень плохо знаком и как то трудно он дается мне(((
Подскажите, пожалуйста, как решить данную задачу

1005 -> 0 - РазБлокирвка
1005 -> 1 - Блокирвка

Заранее благодарен за Ваши ответы.
14 апр 15, 12:15    [17512036]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Gviber
Member

Откуда:
Сообщений: 124
SELECT id,Name, [1005 -> 0] as [Дата разблокировки], [1005 -> 1] as [Дата блокировки]
 FROM (select Id,name,ActionTime,Changes from  #Test) as SourceRa
 pivot(MIN(ActionTime) for Changes in ([1005 -> 0],[1005 -> 1]) ) AS PivotTable
 
14 апр 15, 12:30    [17512137]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
user87
Member

Откуда:
Сообщений: 257
Спасибо огромное
14 апр 15, 12:33    [17512155]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
грязный комплектовщик
Member

Откуда: екб
Сообщений: 130
user87

C PIVOT очень плохо знаком и как то трудно он дается мне(((
Подскажите, пожалуйста, как решить данную задачу

1005 -> 0 - РазБлокирвка
1005 -> 1 - Блокирвка

Заранее благодарен за Ваши ответы.

user87, делай без пивота, через
SELECT Id,name
, avg (case when Changes ='1005 -> 1' then ActionTime end as [Дата блокировки]
, avg (case when Changes ='1005 -> 0' then ActionTime end as [Дата разблокировки]
14 апр 15, 12:38    [17512218]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Gviber
Member

Откуда:
Сообщений: 124
AVG с datetime использовать нельзя. Без пивота будет чуть медленее (там дополинетльное действие делается - compute scalar)
14 апр 15, 12:47    [17512308]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Gviber
AVG с datetime использовать нельзя. Без пивота будет чуть медленее (там дополинетльное действие делается - compute scalar)
Вы же в пивоте пишете MIN - так почему без пивота AVG??
14 апр 15, 13:06    [17512458]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить