2015-12-07 5 views
1

Я пытаюсь преобразовать это:Группировка строк в несколько столбцов

Name, YearMonth, Quantity, Rate 
------------------------------- 
Aaron, 201001, 10, 5 
Aaron, 201002, 13, 6 
Adriana, 201001, 15, 7 
Adriana, 201002, 9, 8 

к этому:

Name, 201001-Quantity, 201001-Rate, 201002-Quantity, 201002-Rate 
----------------------------------------------------------------- 
Aaron, 10, 5, 13, 6 
Adriana, 15, 7, 9, 8 

Я пытался использовать PIVOT, но это, кажется, как вы можете только на стержень 1 колонок

+4

Какая СУБД для этого? Добавьте тег, чтобы указать, используете ли вы 'mysql',' postgresql', 'sql-server',' oracle' или 'db2' - или что-то еще. –

+0

Чтобы получить хорошее форматирование, если вы отправляете код, образцы XML или данных, ** PLEASE ** выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на панели инструментов редактора, чтобы получить хороший формат и синтаксис подчеркнуть это! –

+0

Можете ли вы добавить Berta, 201003, 11, 9 к своим данным образца и скорректировать ожидаемый результат? – jarlh

ответ

0

Вы можете использовать условную агрегацию:

select name, 
     sum(case when yearmonth = 201001 then quantity end) as quantity_201001, 
     sum(case when yearmonth = 201001 then rate end) as rate_201001, 
     sum(case when yearmonth = 201002 then quantity end) as quantity_201002, 
     sum(case when yearmonth = 201002 then rate end) as rate_201002 
from t 
group by name; 

Это стандартный SQL ANSI и должен работать в любой базе данных.

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