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

Откуда:
Сообщений: 64
Всем добрый день!
Подскажите, каким образом можно транспонировать строку в SQL 2008 в столбец?
11 ноя 13, 12:11    [15107817]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
SilverVolg
Member

Откуда:
Сообщений: 36
pivot
11 ноя 13, 12:17    [15107865]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
qwerty112
Guest
SilverVolg
pivot

тогда уж - unpivot

---
declare @xml xml

set @xml = (select *
  from [master].[dbo].[spt_values]
where name='rpc'
for xml raw, elements, type)

select 
	t.c.value('text()[1]', 'varchar(max)') as xz
from @xml.nodes('/row/*') as t(c)

xz
------
rpc
1
A  
0
11 ноя 13, 12:23    [15107929]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Katerinka111
Подскажите, каким образом можно транспонировать строку в SQL 2008 в столбец?

Сначала вы подскажите — как минимум, структуру вашей таблицы (или что у вас там) и желаемый результат.
11 ноя 13, 12:26    [15107965]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
Всем спасибо, сейчас попробую
11 ноя 13, 12:27    [15107980]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
Гость333,
Таблица состоит из кред договора, номера рассылки, и телефонов.
Но телефоны записаны в 20 столбцах, то есть
к/д, номер рассылки, телефон1, телефон2, телефон3 и т.д.

Нужен результат, чтобы было к/д, номер рассылки и телефоны были в одном столбце, то есть таблица всего из 3-х столбцов.
Можно написать через union, но хотелось бы узнать другой вариант реализации.
11 ноя 13, 12:30    [15108008]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
Katerinka111
Нужен результат, чтобы было к/д, номер рассылки и телефоны были в одном столбце, то есть таблица всего из 3-х столбцов.

Ну так
к/д, номер рассылки, телефон1+телефон2+телефон3+...
11 ноя 13, 12:33    [15108032]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
Glory,
нет,
чтобы было:
к/д, номер рассылки, телефон1

след. строка
к/д, номер рассылки, телефон2

Итого 3-и столбца
11 ноя 13, 13:02    [15108271]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
Katerinka111
Гость333,
Таблица состоит из кред договора, номера рассылки, и телефонов.
Но телефоны записаны в 20 столбцах, то есть
...

то есть таблица всего из 3-х столбцов.
.

а какие критерии по отбору 3 из 20 ?
11 ноя 13, 13:14    [15108386]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
declare @test table (id int, num varchar(100), phone_1 varchar(30), phone_2 varchar(30), phone_3 varchar(30), phone_4 varchar(30), phone_5 varchar(30));
insert @test values(1, 'Num 1', 'phone 1.1', 'phone 1.2', 'phone 1.3', 'phone 1.4', 'phone 1.5');
insert @test values(2, 'Num 2', 'phone 2.1', 'phone 2.2', null, 'phone 2.4', null);

select t.id, t.num, x.phone
from dbo.test t
     cross apply
     ( select phone from (values(phone_1), (phone_2), (phone_3), (phone_4), (phone_5)) as p(phone) ) x
where x.phone is not null;
11 ноя 13, 13:21    [15108454]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Katerinka111
телефоны записаны в 20 столбцах, то есть
к/д, номер рассылки, телефон1, телефон2, телефон3 и т.д.

Классный дизайн БД, что тут сказать.
Видимо, для архитектора этой БД слово "нормализация" является чем-то непонятным, пришедшим из языка папуасов Новой Гвинеи.
11 ноя 13, 13:24    [15108493]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
qwerty112
Guest
Katerinka111
Glory,
нет,
чтобы было:
к/д, номер рассылки, телефон1

след. строка
к/д, номер рассылки, телефон2

Итого 3-и столбца

declare @t table (кд int, номер_рассылки int, телефон1 int, телефон2 int, телефон3 int, телефон4 int)

insert into @t
select 1,1,1,2,3,4

insert into @t
select 2,2,5,6,7,8

select кд, номер_рассылки, телефон from @t
unpivot (телефон for dummy in (телефон1, телефон2, телефон3, телефон4)) unpvt

кд          номер_рассылки телефон
----------- -------------- -----------
1           1              1
1           1              2
1           1              3
1           1              4
2           2              5
2           2              6
2           2              7
2           2              8
11 ноя 13, 13:25    [15108499]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
qwerty112,
подскажите, а dummy в запросе это что?
Прошу прощения за заранее, наверно глупый вопрос..
11 ноя 13, 14:53    [15109306]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
qwerty112
Guest
Katerinka111
qwerty112,
подскажите, а dummy в запросе это что?
Прошу прощения за заранее, наверно глупый вопрос..

это просто имя поля (не нужного в результате)
измените запрос так, будет понятнее
select кд, номер_рассылки, телефон, dummy from @t
unpivot (телефон for dummy in (телефон1, телефон2, телефон3, телефон4)) unpvt

зы
меня тоже "удивило", что в SSMS dummy "подсвечивается" как зарегистрированное слово, ...
с чего это ? :)
11 ноя 13, 15:08    [15109434]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
qwerty112
Guest
fix
qwerty112
зы
меня тоже "удивило", что в SSMS dummy "подсвечивается" как зарегистрированное зарезервированное слово, ...
с чего это ? :)
11 ноя 13, 15:10    [15109454]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
qwerty112
меня тоже "удивило", что в SSMS dummy "подсвечивается" как зарегистрированное слово, ...
с чего это ? :)

Разве в SSMS подсвечивается? Вроде только на форуме...
11 ноя 13, 15:13    [15109480]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
qwerty112,
понятно, спасибо.
11 ноя 13, 15:13    [15109483]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
qwerty112
Guest
qwerty112
fix
qwerty112
зы
меня тоже "удивило", что в SSMS dummy "подсвечивается" как зарегистрированное зарезервированное слово, ...
с чего это ? :)

тут, по крайней мере, его нет ...
Зарезервированные ключевые слова (Transact-SQL)
11 ноя 13, 15:14    [15109488]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
qwerty112
Guest
Гость333
qwerty112
меня тоже "удивило", что в SSMS dummy "подсвечивается" как зарегистрированное слово, ...
с чего это ? :)

Разве в SSMS подсвечивается? Вроде только на форуме...

вот
Microsoft SQL Server Management Studio						9.00.1399.00
Microsoft Analysis Services Client Tools						2005.090.1399.00
Microsoft Data Access Components (MDAC)						2000.085.1132.00 (xpsp.080413-0852)
Microsoft MSXML						2.6 3.0 4.0 5.0 6.0 
Microsoft Internet Explorer						8.0.6001.18702
Microsoft .NET Framework						2.0.50727.42
Operating System						5.1.2600


К сообщению приложен файл. Размер - 21Kb
11 ноя 13, 15:18    [15109514]     Ответить | Цитировать Сообщить модератору
 Re: Как преобразовать сроку в столбец в SQL 2008  [new]
Гость333
Member

Откуда:
Сообщений: 3683
qwerty112
Microsoft SQL Server Management Studio						9.00.1399.00

Действительно, в SSMS 2005 подсвечивается.
В SSMS 2008 и 2012 — нет.
В Query Analyzer тоже подсвечивается. Но во времена MSSQL 2000 слово DUMMY, как ни странно, было зарезервированным: http://technet.microsoft.com/en-us/library/aa238507(v=sql.80).aspx :)
В версии 2005 из списка зарезервированных слов его убрали, но подсветка в редакторе осталась. В версии 2008 убрали и подсветку.
11 ноя 13, 15:46    [15109725]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить