2015-12-21 2 views
1

У меня проблема, я пытаюсь использовать PIVOT в моем запросе и без каких-либо результатов. Сейчас у меня есть таблица, которая выглядит как:SQL using PIVOT right

Category  Month Value 
A   August  10 
B   August  19 
C   August  15 
A   September 20 
B   September 23 
C   September 25 
A   October 24 
B   October 87 
C   October 44 

Я хочу, чтобы выглядеть таким образом:

Category  August  September October 
     A  10    20   24 
     B  19    23   87 
     C  15    25   47 

В мой выбор что-то вроде:

Select cat_name, CAST(month AS VARCHAR(20)), value from dbo.table1. 

_

 select * from (
     select ft.categoryData as [category], CAST(fft.date AS VARCHAR(20)) as [month], tt.value as [value] from firstt ft 
       join secondt st on ft.id = st.id 
       join thirdt tt on ft.id = tt.type_id 
       join fourtht fft on ft.id = fft.category_id 
      where ft.date between '2015-07-01' and '2015-09-01' and ft.country = 'EUR' 
group by fft.date, ft.categoryData, tt.value 
       ) as t 

     PIVOT (

    max(value) 
    for [date] in ([jul], [aug], [sept]) 


    ) as pvt 

ответ

0

Пробег: Conditional Aggregate.

select Category, 
     max(case when Month = 'August' then Value END) as August, 
     max(case when Month = 'September' then Value END) as September, 
     max(case when Month = 'October' then Value END) as October 
from Yourtable 
Group by Category 

Или используйте Pivot

select * 
from Yourtable 
pivot (max(Value) For Month in ([August],[September],[October]))pv 

Когда значения в месяц колонке в неизвестна использование динамического SQL

declare @sql nvarchar(max)= '', 
     @col_list varchar(max)='' 

set @col_list =(select distinct quotename(Month)+',' from yourtable for xml path ('')) 
set @col_list = left(@col_list,len(@col_list)-1) 
set @sql = ' 
    select * 
    from yourtable 
    pivot (max(Value) For Month in ('[email protected]_list+'))pv' 

    exec sp_executesql @sql 
+0

Уважаемый VR46, я обновил мой вопрос, что, как я сделал, что касается вашего ответа, но значение имеют 'NULL' –

+0

@DanPaschevici - обновлена ​​проверка динамического метода –

+0

Супер !!! большое спасибо ... он работает –

1

Используя стержень можно написать ниже запроса и синтаксиса перейдите по ссылке ниже как упоминалось

https://www.simple-talk.com/sql/t-sql-programming/questions-about-pivoting-data-in-sql-server-you-were-too-shy-to-ask/

SELECT * 
FROM TABLE_NAME 
PIVOT(MAX(VALUE) FOR MONTH IN (
      [AUGUST] 
      ,[SEPTEMBER] 
      ,[OCTOBER] 
      )) AS 
PIVOT_SALES 

из положить является

enter image description here>

+0

может и сказать, почему вы проголосовали отрицательный – Chanukya

+0

Я не ....... –

+0

может у вас, пожалуйста, сообщите мне правильную причину для отрицательной отметки – Chanukya

1

вы можете использовать следующий код

SELECT * from (SELECT Category, Month, Value 
FROM table1 t) pivot (sum (Value) for Month in ('August', 'September', October')) order by Category;