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

Откуда:
Сообщений: 140
День добрый, заранее извиняюсь за такой вопрос, но нужно помощь.
Есть таблица
Id, num, text
1 1 Техт1
2 1 Техт1
3 1 Техт1
4 2 Техт2
5 2 Техт2
6 2 Техт2

нужен результат на выходе
1 Техт1 Техт1 Техт1
2 Техт2 Техт2 Техт2

Заранее спасибо
15 июн 15, 17:22    [17772896]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20970
Непоказательный пример. Неясно, какой из трёх "Text1" в какое поле попал и почему.
15 июн 15, 17:25    [17772911]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
intruders
Member

Откуда:
Сообщений: 140
15 СекцияДокумент=Объявление на взнос наличными 1
16 Номер=1 1
17 Дата=09.06.2015 1
18 Сумма= 1
19 ПлательщикСчет= 1
20 ПлательщикИНН= 1
21 Плательщик= 1
22 ПлательщикБИК= 1
23 ПлательщикКорсчет= 1
24 ПлательщикБанк1= 1
25 ПлательщикРасчСчет= 1
26 ПлательщикКПП= 1
27 ПолучательСчет= 1
28 ДатаПоступило=09.06.2015 1
29 Получатель= 1
30 ПолучательИНН= 1
31 ПолучательРасчСчет= 1
32 ПолучательБанк1= 1
33 ПолучательБИК= 1
34 ПолучательКорсчет= 1
35 ПолучательКПП= 1
36 ВидПлатежа= 1
37 ВидОплаты=04 1
38 СрокПлатежа=09.06.2015 1
39 Очередность=5 1
40 Код= 1
41 Назначение 1
42 КонецДокумента 1
15 июн 15, 17:28    [17772922]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20970
А по-людски оформить не судьба? в теге CSV, да с точным указанием, какой на показанных данных нужен результат.
15 июн 15, 17:31    [17772937]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
intruders
Member

Откуда:
Сообщений: 140
15 16 17 ...
СекцияДокумент Номер дата ....
15 июн 15, 17:33    [17772943]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8334
intruders, а помощь какая нужна?
15 июн 15, 17:37    [17772955]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
intruders
Member

Откуда:
Сообщений: 140
а как его правильно написать то.
пребывал
select * from (
select id,bank,numdoc from banks where numdoc=1) as s
PIVOT
(
	Count(numdoc)
	FOR bank in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28])
) AS p
15 июн 15, 17:47    [17773001]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8334
intruders, структура таблицы для поворота должна быть:

[номер повернутой строки] [номер повернутой колонки] [значение]


Id num text
11Техт1
12Техт2
13Техт3
21Техт4
22Техт5
23Техт6
15 июн 15, 18:35    [17773246]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4807
Версия SQL Server какая ? На 2012 легко развернуть это с помощью LEAD
15 июн 15, 18:51    [17773296]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
intruders, почему Count(numdoc) то? вам же в колонках значения нужны, а не их количество, верно? Вот и указывайте max(), например.
15 июн 15, 18:57    [17773318]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
Добрый Э - Эх
Guest
a_voronin
Версия SQL Server какая ? На 2012 легко развернуть это с помощью LEAD
гораздо легче и на любой версии сервера через CASE + GROUP BY, если на то пошло... А через LEAD попробуй. Расскажешь нам потом, как это легко было ;)
15 июн 15, 19:19    [17773391]     Ответить | Цитировать Сообщить модератору
 Re: Функция PIVOT  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
intruders
а как его правильно написать то.
пребывал
select * from (
select id,bank,numdoc from banks where numdoc=1) as s
PIVOT
(
	Count(numdoc)
	FOR bank in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28])
) AS p

declare @table table(id int,[text] varchar(max),num int)
insert into @table(id,[text],num) values
 (15,'СекцияДокумент=Объявление на взнос наличными',1)
,(16,'Номер=1',1)
,(17,'Дата=09.06.2015',1)
,(18,'Сумма=',1)
,(19,'ПлательщикСчет=',1)
,(20,'ПлательщикИНН=',1)
,(21,'Плательщик=',1)
,(22,'ПлательщикБИК=',1)
,(23,'ПлательщикКорсчет=',1)
,(24,'ПлательщикБанк1=',1)
,(25,'ПлательщикРасчСчет=',1)
,(26,'ПлательщикКПП=',1)
,(27,'ПолучательСчет=',1)
,(28,'ДатаПоступило=09.06.2015',1)
,(29,'Получатель=',1)
,(30,'ПолучательИНН=',1)
,(31,'ПолучательРасчСчет=',1)
,(32,'ПолучательБанк1=',1)
,(33,'ПолучательБИК=',1)
,(34,'ПолучательКорсчет=',1)
,(35,'ПолучательКПП=',1)
,(36,'ВидПлатежа=',1)
,(37,'ВидОплаты=04',1)
,(38,'СрокПлатежа=09.06.2015',1)
,(39,'Очередность=5',1)
,(40,'Код=',1)
,(41,'Назначение',1)
,(42,'КонецДокумента',1) 

select num,[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28] 
from (select [text],num,ROW_NUMBER()over(PARTITION by num order by id) as RowNo
      from @table) as s
PIVOT
(
	max([text])
	FOR RowNo in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28])
) AS p
16 июн 15, 07:28    [17774222]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить