I am trying to build a table with two cross tabs and multiple columns. I have this so far, and when I run it
create table test2(city nvarchar(10), race nvarchar(30), sex nvarchar(10), age int)
insert into test2 values ('Austin', 'African-American', 'male', 21)
insert into test2 values ('Austin', 'Asian', 'female', 22)
insert into test2 values ('Austin', 'Caucasian', 'male', 23)
insert into test2 values ('Austin', 'Hispanic', 'female', 24)
insert into test2 values ('Austin', 'African-American', 'Unknown', 25)
insert into test2 values ('Austin', 'Asian', 'male', 26)
insert into test2 values ('Austin', 'Caucasian', 'female', 27)
insert into test2 values ('Austin', 'Hispanic', 'Unknown', 28)
insert into test2 values ('Austin', 'Asian', 'male', 29)
insert into test2 values ('Austin', 'Caucasian', 'female', 31)
insert into test2 values ('Dallas', 'Hispanic', 'Unknown', 32)
insert into test2 values ('Dallas', 'African-American', 'male', 33)
insert into test2 values ('Dallas', 'Asian', 'female', 34)
insert into test2 values ('Dallas', 'Caucasian', 'Unknown', 35)
insert into test2 values ('Dallas', 'Hispanic', 'male', 500)
insert into test2 values ('Dallas', 'African-American', 'female', 36)
insert into test2 values ('Dallas', 'Asian', 'Unknown', 37)
insert into test2 values ('Dallas', 'Caucasian', 'male', 38)
insert into test2 values ('Dallas', 'Hispanic', 'female', 39)
insert into test2 values ('Dallas', 'African-American', 'Unknown', 41)
insert into test2 values ('Houston', 'Asian', 'male', 42)
insert into test2 values ('Houston', 'Caucasian', 'female', 43)
insert into test2 values ('Houston', 'Hispanic', 'Unknown', 44)
insert into test2 values ('Houston', 'African-American', 'male', 45)
insert into test2 values ('Houston', 'Asian', 'female', 46)
insert into test2 values ('Houston', 'Caucasian', 'Unknown', 47)
insert into test2 values ('Houston', 'Hispanic', 'male', 48)
insert into test2 values ('Houston', 'African-American', 'female', 49)
insert into test2 values ('Houston', 'Asian', 'Unknown', 51)
insert into test2 values ('Houston', 'Caucasian', 'male', 52)
SELECT *
FROM
(
SELECT a.city, a.sex
FROM [AdventureWorksDW].[dbo].[test2] a
) p
PIVOT
(
COUNT (sex)
FOR sex
IN ([male], [female], [Unknown])
) AS pvt
I get this
(source: realestateagenthealthinsurance.com)
But what I need is this, with two cross tabs on top and a option for multiple columns.
(source: realestateagenthealthinsurance.com)
Is this possible with a pivot or any other solution? Thanks in advance
WITH T AS (
SELECT A.city,
A.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 @test2 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
ORDER BY city, sex