2016-06-22 2 views
3

Я ищу простой способ выполнить это транспонирование:Как перенести таблицу в SQL

date ID Vr val 
1.1.14 1 2000 50 
1.1.14 2 2000 60 
1.1.14 2 2001 100 

date ID vr2000 vr2001 
1.1.14 1 50  0 
1.1.14 2 60  100 

У меня есть что-то вроде 83 переменных и данных более 1 млн записей. Я хочу конкретизировать «vr» с индексной переменной в строке. Любые предложения, как я могу это сделать?

+1

Возможный дубликат [SQL транспонировать полную таблицу] (http://stackoverflow.com/questions/15297809/sql-transpose-full-table) – MusicLovingIndianGirl

+0

Выберите необработанные данные из таблицы. Используйте язык программирования (Java, C#, PHP, любой) для отображения данных в нужном формате. –

ответ

0

Это можно сделать, используя динамический запрос sql и выполнить динамически построенный запрос с использованием sp_executesql хранимого приоритета.

-- Create table Variable 
CREATE TABLE [Variable](
    [date] [nvarchar](50) NULL, 
    [ID] [int] NULL, 
    [vr] [int] NULL, 
    [val] [int] NULL 
) 

--Insert sample records 
INSERT [dbo].[Variable] ([date], [ID], [vr], [val]) 
VALUES (N'1.1.14', 1, 2000, 50), 
     (N'1.1.14', 2, 2000, 60), 
     (N'1.1.14', 2, 2001, 100) 

GO 
--QUERY 
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX); 
DECLARE @ColumnNamesInPivot AS NVARCHAR(MAX); 
DECLARE @ColumnNamesInSelect AS NVARCHAR(MAX); 

--Get distinct values of PIVOT Column 
SELECT TOP 100 PERCENT 
     @ColumnNamesInPivot = ISNULL(@ColumnNamesInPivot + ',', '') 
     + QUOTENAME(vr), 
     @ColumnNamesInSelect = ISNULL(@ColumnNamesInSelect + ',', '') 
     + 'ISNULL(' + QUOTENAME(vr) + ',0) AS [vr' + CAST(vr AS NVARCHAR(50)) 
     + ']' 
FROM (SELECT DISTINCT 
        vr 
      FROM  Variable 
     ) AS P 
ORDER BY vr ASC; 

--Prepare the PIVOT query using the dynamic query 
SET @DynamicPivotQuery = N'Select date,ID,' + @ColumnNamesInSelect + ' 
      FROM (SELECT * 
      FROM  Variable 
     ) AS SourceTable PIVOT(MAX(val) FOR vr IN (' + @ColumnNamesInPivot 
    + ')) AS PVTTable'; 

--PRINT @DynamicPivotQuery; 
EXEC sp_executesql @DynamicPivotQuery; 

Результат выглядит следующим образом:

enter image description here

Смежные вопросы