2013-10-15 2 views
1

Здравствуйте, я новичок в SQL и очень ценю некоторую помощь в переносе таблицы следующим образом. Если посмотреть на подобные сообщения, кажется, что это может быть достигнуто с помощью pivot/univot, но я не уверен, так как примеры, которые я читал, имеют намного меньше столбцов. Любые предложения были бы замечательными!SQL Транспонирование нескольких столбцов в строки

Таблица.

CATEGORY Value1 Value2 Value3 Value4 ... Value15 

Hot 18 17 9 17 ... 18 

Warm  5 3 0 1 ... 3 

Cold  20 2 1 2 ... 2 

Желаемый результат.

CATEGORY Hot Warm Cold 

Value1 18 5 20 

Value2 17 3 2 

Value3 9 0 1 

Value4 17 1 2 

… … … … 

Value15 18 3 2 
+0

Окончательный ответ? загрузите все это в рекурсивный массив и повторите его с более низкими уровнями в обратном порядке. – DevlshOne

+0

http://stackoverflow.com/questions/13372276/simple-way-to-transpose-columns-and-rows-in-sql –

+0

http://stackoverflow.com/questions/15297809/sql-transpose-full-table –

ответ

1
select * 
from tbl 
unpivot (value for name in (Value1, Value2, Value3, Value4, ... Value15)) unpiv 
pivot (max(value) for category in ([hot],[warm],[cold])) piv 
0

Ниже приведен простой код, который я попробовал. Просто запустите и посмотрите, соответствует ли это вашим требованиям!


declare @Tbl1 table(Category Varchar(10), Value1 Int, Value2 Int, Value3 Int, Value4 Int, Value5 Int) 

insert into @Tbl1(Category, Value1, Value2, Value3, Value4, Value5) 
    Values ('Hot', 12, 23, 43, 5, 6) 
    insert into @Tbl1(Category, Value1, Value2, Value3, Value4, Value5) 
    Values ('Warm', 41, 28, 4, 45, 16) 
    insert into @Tbl1(Category, Value1, Value2, Value3, Value4, Value5) 
    Values ('Cold', 1, 3, 543, 15, 26) 

    select * from @Tbl1 

Declare @TblUP Table(Category Varchar(100), Value Int, [Types] Varchar(10)) 

Insert into @TblUP(Category, Value, Types) 
select * from @Tbl1 unpivot ([values] for Types in (Value1, Value2, Value3, Value4, Value5)) as UNPIV 
select * from @TblUP 

Select Types, Hot, Warm, Cold 
From 
    (Select Types, Category, Value from @TblUP) as TUP 
    PIVOT (SUM(Value) for [Category] in ([Hot], [Warm], [Cold])) 
    as PT 
Смежные вопросы