[英]Format cross tabs in a pivot table
我有此查询可按年龄分组种族
create table test4(city nvarchar(10), race nvarchar(30), sex nvarchar(10), age int)
insert into test4 values ('Austin', 'African-American', 'male', 21)
insert into test4 values ('Austin', 'Asian', 'female', 22)
insert into test4 values ('Austin', 'Caucasian', 'male', 23)
insert into test4 values ('Austin', 'Hispanic', 'female', 24)
insert into test4 values ('Austin', 'African-American', 'Unknown', 25)
insert into test4 values ('Austin', 'Asian', 'male', 26)
insert into test4 values ('Austin', 'Caucasian', 'female', 27)
insert into test4 values ('Austin', 'Hispanic', 'Unknown', 28)
insert into test4 values ('Austin', 'Asian', 'male', 29)
insert into test4 values ('Austin', 'Caucasian', 'female', 31)
insert into test4 values ('Dallas', 'Hispanic', 'Unknown', 32)
insert into test4 values ('Dallas', 'African-American', 'male', 33)
insert into test4 values ('Dallas', 'Asian', 'female', 34)
insert into test4 values ('Dallas', 'Caucasian', 'Unknown', 35)
insert into test4 values ('Dallas', 'Hispanic', 'male', 500)
insert into test4 values ('Dallas', 'African-American', 'female', 36)
insert into test4 values ('Dallas', 'Asian', 'Unknown', 37)
insert into test4 values ('Dallas', 'Caucasian', 'male', 38)
insert into test4 values ('Dallas', 'Hispanic', 'female', 39)
insert into test4 values ('Dallas', 'African-American', 'Unknown', 41)
insert into test4 values ('Houston', 'Asian', 'male', 42)
insert into test4 values ('Houston', 'Caucasian', 'female', 43)
insert into test4 values ('Houston', 'Hispanic', 'Unknown', 44)
insert into test4 values ('Houston', 'African-American', 'male', 45)
insert into test4 values ('Houston', 'Asian', 'female', 46)
insert into test4 values ('Houston', 'Caucasian', 'Unknown', 47)
insert into test4 values ('Houston', 'Hispanic', 'male', 48)
insert into test4 values ('Houston', 'African-American', 'female', 49)
insert into test4 values ('Houston', 'Asian', 'Unknown', 51)
insert into test4 values ('Houston', 'Caucasian', 'male', 52);
WITH T AS (
SELECT
A.city as city, A.sex as sex,
CASE
WHEN A.age BETWEEN 20 AND 30 THEN '20-30_' + race
WHEN A.age BETWEEN 31 AND 40 THEN '31-40_' + race
WHEN A.age BETWEEN 41 AND 50 THEN '41-50_' + race
END AS age_range_race
FROM test4 AS A
)
SELECT *
FROM T
PIVOT( COUNT(age_range_race) FOR age_range_race
IN(
[20-30_African-American],
[20-30_Asian],
[20-30_Caucasian],
[20-30_Hispanic],
[31-40_African-American],
[31-40_Asian],
[31-40_Caucasian],
[31-40_Hispanic],
[41-50_African-American],
[41-50_Asian],
[41-50_Caucasian],
[41-50_Hispanic]
)
) AS P
当我运行它时,我得到了
但是我需要的是这个,没有年龄范围。
我将把数据透视表放在带有自定义标题的Radgrid中,该标题将显示年龄范围,因此在列标题中将不需要它们。 这可能吗? 提前致谢
我不确定是否要将年龄范围折叠到单个列中,还是要在查询中重复相同的列名。 如果要让它们折叠:
http://sqlfiddle.com/#!3/f0ca0/3
WITH T AS (
SELECT
A.city as city, A.sex as sex,
CASE
WHEN A.age BETWEEN 20 AND 30 THEN '20-30_' + race
WHEN A.age BETWEEN 31 AND 40 THEN '31-40_' + race
WHEN A.age BETWEEN 41 AND 50 THEN '41-50_' + race
END AS age_range_race
FROM test4 AS A
)
SELECT
P.city,
P.sex,
[20-30_African-American] + [31-40_African-American] + [41-50_African-American] as [African-American],
[20-30_Asian] + [31-40_Asian] + [41-50_Asian] as [Asian],
[20-30_Caucasian] + [31-40_Caucasian] + [41-50_Caucasian] as [Caucasian],
[20-30_Hispanic] + [31-40_Hispanic] + [41-50_Hispanic] as [Hispanic]
FROM T
PIVOT( COUNT(age_range_race) FOR age_range_race
IN(
[20-30_African-American],
[20-30_Asian],
[20-30_Caucasian],
[20-30_Hispanic],
[31-40_African-American],
[31-40_Asian],
[31-40_Caucasian],
[31-40_Hispanic],
[41-50_African-American],
[41-50_Asian],
[41-50_Caucasian],
[41-50_Hispanic]
)
) AS P
如果您确实希望多次返回相同的列名,那么我想您真的很头疼。 这是我能提供的最接近的方法(尽管它不是一个很好的解决方案,因为它在您的基本设置之外没有什么用):
http://sqlfiddle.com/#!3/f0ca0/5
WITH T AS (
SELECT
A.city as city, A.sex as sex,
CASE
WHEN A.age BETWEEN 20 AND 30 THEN '20-30_' + race
WHEN A.age BETWEEN 31 AND 40 THEN '31-40_' + race
WHEN A.age BETWEEN 41 AND 50 THEN '41-50_' + race
END AS age_range_race
FROM test4 AS A
)
SELECT
P.city,
P.sex,
[20-30_African-American] as [African-American1],
[20-30_Asian] as [Asian1],
[20-30_Caucasian] as [Caucasian1],
[20-30_Hispanic] as [Hispanic1],
[31-40_African-American] as [African-American2],
[31-40_Asian] as [Asian2],
[31-40_Caucasian] as [Caucasian2],
[31-40_Hispanic] as [Hispanic2],
[41-50_African-American] as [African-American3],
[41-50_Asian] as [Asian3],
[41-50_Caucasian] as [Caucasian3],
[41-50_Hispanic] as [Hispanic3]
FROM T
PIVOT( COUNT(age_range_race) FOR age_range_race
IN(
[20-30_African-American],
[20-30_Asian],
[20-30_Caucasian],
[20-30_Hispanic],
[31-40_African-American],
[31-40_Asian],
[31-40_Caucasian],
[31-40_Hispanic],
[41-50_African-American],
[41-50_Asian],
[41-50_Caucasian],
[41-50_Hispanic]
)
) AS P
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.