具有多列分组的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
您应该编辑问题并显示您尝试过的查询。谢谢您的回复。我们能动态地做到这一点吗?谷歌:“动态轴心”。这和你问的问题完全不同。