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

Откуда:
Сообщений: 162
Здравствуйте, добрые люди!

Я в тупике :(

Есть выборка:
id	FIO			Side
1	Иванов			Левая сторона
2	Петров			Центр
3	Сидоров			Правая сторона
4	Васильев		Правая сторона
5	Смирнов			Боковой
6	Золотов			Левая сторона



Из нее нужно сделать такую выборку:
Левая сторона	Центр	       Правая сторона	Боковой
Иванов		Петров	       Сидоров		Смиронов
Золотов		Васильев



Как это сделать силами T-SQL? Помогите пожалуйста! PIVOT не помогает :(
16 апр 14, 16:13    [15891684]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37254
Алгоритм размещения по сторонам надо угадать?

Сообщение было отредактировано: 16 апр 14, 16:16
16 апр 14, 16:16    [15891714]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
Rusich2012
Member

Откуда:
Сообщений: 162
Гавриленко Сергей Алексеевич
Алгоритм размещения по сторонам надо угадать?


Это вообщем то не важно! Это я уже сам допилю)
16 апр 14, 16:17    [15891723]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
guest123456
Guest
Rusich2012,

ROW_NUMBER() + pivot'ируешь по остатку от деления на 4.
16 апр 14, 16:20    [15891761]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37254
Rusich2012
Гавриленко Сергей Алексеевич
Алгоритм размещения по сторонам надо угадать?


Это вообщем то не важно! Это я уже сам допилю)
Дарю, допиливайте на здоровье:

select [Левая сторона] = 'Иванов', Центр = 'Петров', [Правая сторона] = 'Сидоров', Боковой = 'Смиронов'
union all select 'Золотов', 'Васильев', '', ''
16 апр 14, 16:22    [15891772]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
guest123456
Guest
guest123456,

sorry, не доглядел условия(
16 апр 14, 16:23    [15891785]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
Rusich2012
Member

Откуда:
Сообщений: 162
Гавриленко Сергей Алексеевич
Rusich2012
пропущено...


Это вообщем то не важно! Это я уже сам допилю)
Дарю, допиливайте на здоровье:

select [Левая сторона] = 'Иванов', Центр = 'Петров', [Правая сторона] = 'Сидоров', Боковой = 'Смиронов'
union all select 'Золотов', 'Васильев', '', ''



Спасибо! Но, это мы уже проходили :) Я поэтому и спрашиваю, как бы это автоматизировать:) Т.к., поле Side может быть и длиннее.
16 апр 14, 16:27    [15891811]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
_human
Member

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

select
case when side = 'Левая сторона' then FIO end
, case when side = 'Центр' then FIO end
...
16 апр 14, 16:27    [15891812]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
Rusich2012
Member

Откуда:
Сообщений: 162
_human
Rusich2012,

select
case when side = 'Левая сторона' then FIO end
, case when side = 'Центр' then FIO end
...



И это проходили :)
16 апр 14, 16:30    [15891838]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
WITH T AS
(
 SELECT * FROM(VALUES
 (1,'Иванов','Левая сторона')
,(2,'Петров','Центр')
,(3,'Сидоров','Правая сторона')
,(4,'Васильев','Правая сторона')
,(5,'Смирнов','Боковой')
,(6,'Золотов','Левая сторона'))U(id,FIO,Side)
)
SELECT N,[Левая сторона],[Центр],[Правая сторона],[Боковой]
FROM (SELECT N=ROW_NUMBER()OVER(PARTITION BY Side ORDER BY id),FIO,Side FROM T) S
PIVOT (MIN(FIO)FOR Side IN([Левая сторона],[Центр],[Правая сторона],[Боковой]))P
16 апр 14, 16:39    [15891911]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Rusich2012
Спасибо! Но, это мы уже проходили :) Я поэтому и спрашиваю, как бы это автоматизировать:) Т.к., поле Side может быть и длиннее.

что значит "длиннее"? если значения side заранее неизвестны, тогда ищите по форуму "динамический pivot"
16 апр 14, 16:39    [15891914]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
Rusich2012
Member

Откуда:
Сообщений: 162
iap
WITH T AS
(
 SELECT * FROM(VALUES
 (1,'Иванов','Левая сторона')
,(2,'Петров','Центр')
,(3,'Сидоров','Правая сторона')
,(4,'Васильев','Правая сторона')
,(5,'Смирнов','Боковой')
,(6,'Золотов','Левая сторона'))U(id,FIO,Side)
)
SELECT N,[Левая сторона],[Центр],[Правая сторона],[Боковой]
FROM (SELECT N=ROW_NUMBER()OVER(PARTITION BY Side ORDER BY id),FIO,Side FROM T) S
PIVOT (MIN(FIO)FOR Side IN([Левая сторона],[Центр],[Правая сторона],[Боковой]))P


А если в поле Side значения поменяются? Нельзя это автоматизировать, что бы не менять каждый раз ручками?
16 апр 14, 17:07    [15892109]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
_human
Member

Откуда:
Сообщений: 566
Shakill
ищите по форуму "динамический pivot"
16 апр 14, 17:10    [15892138]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать столбцы строками?  [new]
iap
Member

Откуда: Москва
Сообщений: 47105
Rusich2012
А если в поле Side значения поменяются? Нельзя это автоматизировать, что бы не менять каждый раз ручками?
Можно же в документации посмотреть.
http://msdn.microsoft.com/ru-ru/library/ms177410(v=sql.100).aspx
16 апр 14, 17:12    [15892150]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить