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

Откуда: Kyiv
Сообщений: 476
HI2All!
Пытаюсь задачку решить с использованием PIVOT.
Microsoft SQL Server 2008 (SP3) - 10.0.5512.0 (X64) Aug 22 2012 19:25:47 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)


Есть исходная таблица данных.

CREATE TABLE [dbo].[data](
	[Rascroy] [int] NOT NULL,
	[OutDate] [smalldatetime] NOT NULL,
	[Qty] [money] NOT NULL,
	[material] [nchar](20) NOT NULL
) ON [PRIMARY]

GO


INSERT INTO [data]
           ([Rascroy]
           ,[OutDate]
           ,[Qty]
           ,[material])
SELECT 3005616,'2013-08-14','15.00','Brokelman XL'
UNION ALL
SELECT '3005682','2013-08-22',30.00,	    'Lider'
UNION ALL
SELECT '3005725','2013-09-01',	29.00,	'Brokelman'
select * from data


Rascroy OutDate Qty material
3005616 2013-08-14 15.00 Brokelman XL
3005682 2013-08-22 30.00 Lider
3005725 2013-09-01 29.00 Brokelman



Надо развернуть таблицу и вывести все данные (OutDate,Qty,material) в столбце, название которого = значению поля Rascroy.

Делаю так:

SELECT * FROM (
	select Rascroy
	,	 ProdSectionName
	, OutDate
	, Qty
	, material
	from 
	data
	) a
PIVOT 
	(
		MAX (OutDate)  FOR  [Rascroy] in ([3005682],[3005616],[3005725])
	) b


Но выводится только значение OutDate (нельзя же в PIVOT указать список полей?).

Qty material 3005682 3005616 3005725
29.00 Brokelman NULL NULL 2013-09-01
15.00 Brokelman XL NULL 2013-08-14 NULL
30.00 Lider 2013-08-22 NULL NULL




А нужен вот такой результат:

3005682 3005616 3005725
Qty 30 15 29
Material Lider Brokelman XL Brokelman
OutDate 22.08.2013 14.08.2013 01.09.2013


Это реально сделать с помощью PIVOT без извратов с динамикой и т.д.?

Список значений FOR [Rascroy] in ([3005682],[3005616],[3005725]) я буду динамически на клиенте формировать, от этого никуда не деться. А вот как сам запрос сотворить, вменяемых мыслей у меня пока нет :(.

F1 plz.
26 сен 13, 12:58    [14886924]     Ответить | Цитировать Сообщить модератору
 Re: очередной пост про PIVOT  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Romka-Fes
Это реально сделать с помощью PIVOT без извратов с динамикой и т.д.?

Вряд ли.

Romka-Fes
F1 plz.

транспонирование таблицы
транспонировать таблицу
26 сен 13, 13:22    [14887094]     Ответить | Цитировать Сообщить модератору
 Re: очередной пост про PIVOT  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
with pvt (Colname,Rascroy,Value) as
(select 'OutDate' ,Rascroy, cast(OutDate as varchar(max)) from data
 union  all
 select 'Qty' ,Rascroy, cast(Qty as varchar(max)) from data 
 union  all
 select 'Material' ,Rascroy, cast(Material as varchar(max)) from data)
SELECT * FROM pvt
PIVOT 
	(
		MAX (Value)  FOR  [Rascroy] in ([3005682],[3005616],[3005725])
	) b
26 сен 13, 13:31    [14887159]     Ответить | Цитировать Сообщить модератору
 Re: очередной пост про PIVOT  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 476
LexusR,

Thanks a lot!
26 сен 13, 13:37    [14887214]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить