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

Откуда:
Сообщений: 143
можно без создания курсора "транспонировать" таблицу в N записей в таблицу с одной записью с N колонками?
Поясню
Таблица А
поле P
10
20
30
15
в таблицу B P1 P2 P3 P4 - имена колонок-полей
10 20 30 15
Не хотелось бы построчно в курсоре присвоением заполнять поля P(i)
5 апр 13, 09:42    [14138669]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/faq/faq_topic.aspx?fid=104
5 апр 13, 10:03    [14138727]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
forts
Member

Откуда:
Сообщений: 143
tpg
https://www.sql.ru/faq/faq_topic.aspx?fid=104


Я неопытный T-sql щик, не понял как при помощи динамического запроса можно решить мою задачу без использования построчного курсора.
5 апр 13, 10:15    [14138751]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
forts
 в таблицу B  P1  P2 P3 P4 - имена колонок-полей
10 20 30 15
а почему не так:
P1P2P3P4
10152030
?
5 апр 13, 10:19    [14138770]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
forts
Member

Откуда:
Сообщений: 143
Паганель
forts
 в таблицу B  P1  P2 P3 P4 - имена колонок-полей
10 20 30 15
а почему не так:
P1P2P3P4
10152030
?

это самое и имелось в виду. Только под другому оформлено
5 апр 13, 10:26    [14138798]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
-- test data
use tempdb
create table A(P int)
insert into A values (10), (20), (30), (15)
go
-- end of test data

select [1] as P1, [2] as P2, [3] as P3, [4] as P4
  from (select P, row_number() over(order by P) as R from A) as T
 pivot (min(P) for R in ([1], [2], [3], [4])) as V
5 апр 13, 10:27    [14138809]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
forts
Member

Откуда:
Сообщений: 143
Паганель
-- test data
use tempdb
create table A(P int)
insert into A values (10), (20), (30), (15)
go
-- end of test data

select [1] as P1, [2] as P2, [3] as P3, [4] as P4
  from (select P, row_number() over(order by P) as R from A) as T
 pivot (min(P) for R in ([1], [2], [3], [4])) as V


В исходной задаче поправлюсь. В таблице А есть еще поле N
т.е. A
N P
1 10
2 20
3 30
4 15

Записываются поля в Pi по порядку N. Смогу я записать в таблицу B таким запросом

insert B (select [1] as P1, [2] as P2, [3] as P3, [4] as P4
from (select P, row_number() over(order by N) as R from A) as T
pivot (min(P) for R in ([1], [2], [3], [4])) as V )

?
5 апр 13, 10:38    [14138864]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
-- test data
use tempdb
create table A(N int, P int)
insert into A values (1, 10), (2, 20), (3, 30), (4, 15)
go
-- end of test data

select [1] as P1, [2] as P2, [3] as P3, [4] as P4
  from A
 pivot (min(P) for N in ([1], [2], [3], [4])) as V
5 апр 13, 10:40    [14138877]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
forts
Member

Откуда:
Сообщений: 143
Паганель,
правильно ли я понял, что
select [i] as Pi from A выбирает i -ую запись из таблицы A ?
pivot только выводит как отчет о транспонировании ?
5 апр 13, 10:56    [14138974]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
Glory
Member

Откуда:
Сообщений: 104760
forts
правильно ли я понял, что
select [i] as Pi from A выбирает i -ую запись из таблицы A ?

Не правильно
5 апр 13, 10:57    [14138980]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
в таблице нет i-й записи

в данной тестовой таблице есть запись, в которой поле N содержит значение, например, 3

насчет отчета я вопрос не понял
5 апр 13, 10:59    [14138993]     Ответить | Цитировать Сообщить модератору
 Re: "Транспонирующий" запрос  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
forts,
PIVOT — поворот таблицы в T-SQL
5 апр 13, 17:03    [14141735]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить