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

Откуда:
Сообщений: 106
добрый день, нид хелп:

как простой запрос вида

select t1.a as 'aa', t1.b as 'bb' from t1


который возвращает
  aa        bb 
'3333'   '44444
'2222'   '1111'


вернуть в таком виде:

Key    Value
'aa'   '3333'
'bb'   '44444'
'aa'   '2222'
'bb'   '1111'


спасибо
19 ноя 13, 16:43    [15155893]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не PIVOT, запутался совсем  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
union all обычный.
19 ноя 13, 16:47    [15155936]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не PIVOT, запутался совсем  [new]
cross apply
Guest
select 
  ca.*
from t1 t
cross apply  (
  select 
    key = 'aa'
    , value = t.a
  union all
  select 
    key = 'bb'
    , value = t.b
) ca
19 ноя 13, 17:30    [15156386]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не PIVOT, запутался совсем  [new]
pio777
Member

Откуда:
Сообщений: 127
cross apply,
Так быстрее будет:
with t1 as (select * from (values('3333', '44444'),('2222', '1111')) a(a, b))
select 'aa' [Key], a Value from t1
union all
select 'bb', b from t1
19 ноя 13, 17:51    [15156561]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не PIVOT, запутался совсем  [new]
sdet
Member

Откуда:
Сообщений: 463
cross apply
select 
  ca.*
from t1 t
cross apply  (
  select 
    key = 'aa'
    , value = t.a
  union all
  select 
    key = 'bb'
    , value = t.b
) ca

Зачем огород городить? Просто Union all достаточно.
19 ноя 13, 17:55    [15156584]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не PIVOT, запутался совсем  [new]
Гость333
Member

Откуда:
Сообщений: 3683
pio777
cross apply,
Так быстрее будет:
with t1 as (select * from (values('3333', '44444'),('2222', '1111')) a(a, b))
select 'aa' [Key], a Value from t1
union all
select 'bb', b from t1

Два тейблскана будут быстрее, чем один? Вы гарантируете это?
19 ноя 13, 17:55    [15156590]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не PIVOT, запутался совсем  [new]
Гость333
Member

Откуда:
Сообщений: 3683
sdet
Зачем огород городить?

А вы сравните планы выполнения.
19 ноя 13, 17:57    [15156600]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не PIVOT, запутался совсем  [new]
o-o
Guest
declare @t table (a varchar(10), b varchar(10));
insert into @t values ('3333', '44444'), ('2222', '1111');

select *
from @t

select case num.n 
           when 1 then 'aa'
           when 2 then 'bb'
       end as [Key],
case num.n 
           when 1 then a
           when 2 then b
       end as Value        

from @t cross join (values(1),(2)) num(n)
19 ноя 13, 18:20    [15156703]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не PIVOT, запутался совсем  [new]
pio777
Member

Откуда:
Сообщений: 127
Гость333,

Да, вы правы, чтений больше.
19 ноя 13, 18:52    [15156842]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не PIVOT, запутался совсем  [new]
_Vetal_
Member

Откуда:
Сообщений: 106
всем спасибо!
еще с помощью unpivot можно сделать, но что быстрее это уже сам по планам посмотрю..еще раз спасибо!


DECLARE @t1 TABLE(
a varchar(max),
b varchar(max));
INSERT INTO @t1 values ('3333', '44444')
INSERT INTO @t1 values ('2222', '11111')

SELECT [key], [value]
FROM
(SELECT a as aa, b as bb
 FROM @t1) p
UNPIVOT
([value] FOR [key] IN
	(aa, bb)
) as unppvt
19 ноя 13, 18:59    [15156866]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT не PIVOT, запутался совсем  [new]
Exproment
Member

Откуда:
Сообщений: 416
cross apply, гениально. Сам бы union all написал (((
19 ноя 13, 19:36    [15156990]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить