2012-01-20 3 views
1

У меня есть серьезная проблема. Скажем, мои данные расположены в следующем формате:SQL Server: поворот на несколько колонок

Name  Businees_unit Forecast Upside 
Jack.N India   100  50 
Jack.N China   250  20 

я должен поворачиваться Forecast и Upside для Business_Unit, так что таблица будет выглядеть следующим образом

Name Forecast_India Upside_India  Forecast_China Upside_China 
Jack 100    50    250    20 

Можно ли это сделать в одном запросе?

Его первая запись, поэтому любая помощь очень приветствуется.

Благодаря

+1

Какие RDBMS (SQLServer, Oracle, MySQL и т.д.) это? –

ответ

1

общее решение:

select name, 
     sum(case when Businees_unit = 'India' then Forecast else 0 end) Forecast_India, 
     sum(case when Businees_unit = 'India' then Upside else 0 end) Upside_India, 
     sum(case when Businees_unit = 'China' then Forecast else 0 end) Forecast_China, 
     sum(case when Businees_unit = 'China' then Upside else 0 end) Upside_China 
from My_table 
group by name 
0

Я хотел бы использовать автообъединение:

SELECT DISTINCT SomeTable.Name, China.Forecast as Forecast_China, China.Upside as Upside_China 
, India.Forecast as Forecast_India, India.Upside as Upside_India 
FROM SomeTable 
inner join SomeTable India on India.Name = SomeTable.Name AND India.Business_unit = 'India' 
inner join SomeTable China on China.Name = SomeTable.Name AND China.Business_unit = 'China' 
+0

Вы возвращаете две одинаковые строки, потому что [Jack.N] появляется дважды в таблице – Robb

+0

Совершенно верно, я забыл, что должен работать сейчас :) – RobJohnson

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