2016-11-08 3 views
2

У меня есть таблица с именем Прогноз, как показано ниже:SQL транспонировать данные

enter image description here

Product_BK имеет около 80 000 записей, в то время как месяц 12. Государства остаются неизменными на уровне 5.

Как можно Я пишу запрос, чтобы транспонировать данные, чтобы выглядеть, как показано ниже:

enter image description here

Это на сервере SQL и предпочитают не спускаться по динамическому маршруту запроса.

Спасибо за все ваши входы

+0

Это выглядит для меня, как вы хотите _unpivot_ исходную таблицу. Какую базу данных вы используете (например, MySQL, Oracle и т. Д.). Это было бы относительно безболезненно в Oracle или SQL Server, но сложнее в MySQL. –

+0

Спасибо за быстрый ответ Тим, это на сервере MS SQL – OZRiz

ответ

3

Вы можете использовать SQL Server встроенный в UNPIVOT функции:

SELECT PRODUCT_BK, Month, State, Forecast 
FROM 
(SELECT * FROM Forecast_Table) t 
UNPIVOT 
(Forecast FOR State IN (SA_NT, QLD, VIC_TAS, WA, NSW_ACT)) AS fcst 
+0

Он работал как магия! Вы абсолютная ЗВЕЗДА. Большое спасибо за быстрый ответ. – OZRiz

+0

Уже сделал, но мне не хватает очков Брауни, которые будут отображаться :) – OZRiz

+0

Еще два вопроса, основанные на предлагаемом запросе: как я могу переименовать состояния по умолчанию (например: QLD в Квинсленд) в качестве вывода из запроса? Как я могу агрегировать прогноз штатов на более высокий уровень (например, национальный)? Спасибо – OZRiz

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