2016-09-08 2 views
2

У меня есть данные таблицы следующим образомSQL Pivot запрос с несколькими группирования колонки

day group category appcount 
----------------------------------------- 
Fri F27-28 music 4 
Fri F27-28 radio 1 
Fri F27-28 show 1 
Fri F27-28 video 8 
Fri F29-32 music 6 
Fri F29-32 radio 2 
Fri F29-32 video 22 
Fri M22- music 1 
Fri M22- video 2 
Fri M23-26 music 4 
Fri M23-26 video 8 

Теперь, я хотел бы иметь результат, поворачиваясь категорию и день, следующим образом.

Age Group music-Fri music-Mon music-Sun music-Tue music-Sat music-Thu music-Wed radio-Fri radio-Mon radio-Sun radio-Tues radio-Sat radio-Thu radio-Wed 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
F27-28 4 16 5 11 17 13 9 1 1 3 2 8 2 
F29-32 6  2 6 4 4 4 2 5  2  3 2 
F33-42  2 2    3  1 1    3 
M22- 1 15 14 10  4 4       
M23-26 4 7 5 2 12 14 7       

Я пробовал несколько запросов, но не смог добиться группировки 2 столбцов, дня и категории. Извините за проблему с форматом данных. Пожалуйста помоги.

Вот мой запрос

SELECT * 
FROM (
    SELECT 
     [group], 
     [day], 
     category, 
     appcount as counts 
    FROM monthly_age_apps 
) as s 
PIVOT 
(
    SUM(counts) 
    FOR [category] IN (video, radio, show, music) 
)AS pvt 

Спасибо, Sathish

+0

Вы должны отредактировать вопрос и показать запросы, которые вы пробовали. –

ответ

0

Я считаю, что проще использовать условную агрегацию для многих запросов шарнирных:

select agegroup, 
     sum(case when category = 'music' and day = 'Fri' then appcount else 0 end) as music_fri, 
     sum(case when category = 'music' and day = 'Mon' then appcount else 0 end) as music_mon, 
     . . . 
from 
group by agegroup; 
+0

Спасибо за ваш ответ. Можем ли мы сделать это динамически? – Sathish

+0

Google: «<имя базы данных> динамический стержень». Это совсем другой вопрос, который вы задали. –

0

Для ANSI-Sql вы можете использовать условный агрегирование:

SELECT t.group , 
     MAX(CASE WHEN t.day = 'Sun' AND t.category = 'music' AND THEN t.appcount) as Sun-Music, 
     MAX(CASE WHEN t.day = 'Sun' AND t.category = 'radio' AND THEN t.appcount) as Sun-Radio, 
     MAX(CASE WHEN t.day = 'Mon' AND t.category = 'music' AND THEN t.appcount) as Mon-Music, 
     MAX(CASE WHEN t.day = 'Mon' AND t.category = 'radio' AND THEN t.appcount) as Mon-Radio, 
     ........ 
FROM YourTable t 
GROUP BY t.group 
Смежные вопросы