2012-03-06 2 views
0

나는 레이스를 선회이 쿼리 나이형식 크로스 탭

 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 

로 그룹화하고 난 그것을 실행할 때 나는 이것이하지만 내가 필요로하는 것은 이것이다

1 http://img834.imageshack.us/img834/8808/sqlnow.jpg

수 , 나이 범위없이. 내가 나이를 표시하는 사용자 정의 헤더와 Radgrid에서 피벗을 넣어 될 것입니다

1 http://img716.imageshack.us/img716/1462/sqllater.jpg

그래서 그들은 열 헤더에 필요하지 않을 것입니다 범위. 이것이 가능한가? 미리 감사드립니다.

답변

0

연령대를 단일 열로 축소 할 것인지 또는 같은 열 이름을 쿼리에서 반복 할 것인지 여부는 확실하지 않습니다. 당신이 원하는 경우 그 붕괴 : 당신이 정말로 같은 열 이름이 여러 번 반환하려면

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 
+0

을 BTW : (그것은 당신의 기본 설정을 넘어 많은 일을하지 않기 때문에,이 솔루션의 좋은 것은 아니지만) 이것은 내가 제공 할 수있는 가장 가까운 sqlfiddle.com –

+0

답장을 보내 주셔서 감사 드리며 도움을 주셔서 감사합니다. 그러나 가능한 경우 동일한 열 이름이 여러 번 반환되어야합니다. – user973671

+0

글쎄, 난 당신이 그들의 이름보다는 결과 집합에서 자신의 위치에 의해 열을 명확하게 계획해야한다고 가정합니다. 이 경우 두 번째 예제에서 열 별칭에서 후행 숫자를 제거하면 원하는 결과를 얻을 수 있습니다. –