具有多列分组的SQL Pivot查询

具有多列分组的SQL Pivot查询,sql,pivot,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-

我有一个表数据如下

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
现在,我想通过旋转Category和Day得到一个结果,如下所示

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                           
我尝试了一些查询,但无法实现对两列(日期和类别)的分组。很抱歉数据格式问题。请帮忙

这是我的问题

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

我发现对许多pivot查询只使用条件聚合更简单:

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;

对于
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

您应该编辑问题并显示您尝试过的查询。谢谢您的回复。我们能动态地做到这一点吗?谷歌:“动态轴心”。这和你问的问题完全不同。