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

Откуда: Санкт-Петербург
Сообщений: 51
Добрый день! Есть выборка:

Num	F1	F2
117 Павловская, д.7 кв.45
117 Павловская7 кв.45
222 Кузнечный 5 кв. 1
225 Сергиенко, д.8 кв.6
225 Сергиенко, д.8а кв. 6

Нужен запрос, чтобы преобразовать ее к виду:

Num	F1_1	F2_1	F1_2	F2_2
117 Павловская, д.7 кв.45 Павловская7 кв.45
222 Кузнечный 5 кв. 1 NULL NULL
225 Сергиенко, д.8 кв.6 Сергиенко, д.8 кв. 6

Количество повторяющихся значений по Num можно заранее посчитать, как правило, не больше четырех.
10 дек 15, 13:30    [18540185]     Ответить | Цитировать Сообщить модератору
 Re: Нужен запрос: траспонировать по полю с повторяющимися значениями  [new]
Glory
Member

Откуда:
Сообщений: 104751
Morfeuz
Количество повторяющихся значений по Num можно заранее посчитать, как правило, не больше четырех.

На форуме полно примеров реализации таких запросов
10 дек 15, 13:35    [18540214]     Ответить | Цитировать Сообщить модератору
 Re: Нужен запрос: траспонировать по полю с повторяющимися значениями  [new]
Morfeuz
Member

Откуда: Санкт-Петербург
Сообщений: 51
Glory,
спасибо, конечно, но у меня не получилось внятно сформулировать запрос, чтобы найти такое(
Ткните носом, если не трудно))
10 дек 15, 13:40    [18540234]     Ответить | Цитировать Сообщить модератору
 Re: Нужен запрос: траспонировать по полю с повторяющимися значениями  [new]
Glory
Member

Откуда:
Сообщений: 104751
Morfeuz
спасибо, конечно, но у меня не получилось внятно сформулировать запрос, чтобы найти такое(
Ткните носом, если не трудно))

Это называется перекрестный запрос, кросстаб запрос, шахматка
10 дек 15, 13:41    [18540244]     Ответить | Цитировать Сообщить модератору
 Re: Нужен запрос: траспонировать по полю с повторяющимися значениями  [new]
o-o
Guest
declare @t table(Num int,	F1 varchar(100),	F2 varchar(100));
insert into @t values
(117,	'Павловская, д.7',	'кв.45'),
(117,	'Павловская7',	'кв.45'),
(222,	'Кузнечный 5',	'кв. 1'),
(225,	'Сергиенко, д.8',	'кв.6'),
(225,	'Сергиенко, д.8а',	'кв. 6');

with cte as
(
select *, ROW_NUMBER() over(partition by num order by f1) rn
from @t
)

select Num,
   min(case rn when 1 then f1 end) f1_1,
   min(case rn when 1 then f2 end) f2_1,
   min(case rn when 2 then f1 end) f1_2,
   min(case rn when 2 then f2 end) f2_2
from cte
group by num;

если есть гарантия, что максимально 4 повтора num, то пишите еще по паре case-ов для rn 3,4.
если это переменная величина, собирайте динамику
10 дек 15, 14:33    [18540681]     Ответить | Цитировать Сообщить модератору
 Re: Нужен запрос: траспонировать по полю с повторяющимися значениями  [new]
Morfeuz
Member

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

спасибо, это пять!!! Очень вам благодарен!!!
Пробовал разбираться с хранимой процедурой из FAQ, жесть...
10 дек 15, 14:56    [18540851]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить