2012-03-06 203 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

,但我需要的是這個,沒有年齡範圍。

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

我將要放樞軸在radgrid控件與自定義標題,將顯示的年齡範圍,使他們不會在列標題是必要的。這可能嗎? 在此先感謝

回答

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

順便說一句 - 我是開發商sqlfiddle.com – 2012-03-06 06:51:32

+0

感謝您的回覆,我感謝您的幫助,但如果可能,我真的需要多次返回相同的列名。 – user973671 2012-03-06 14:09:42

+0

那麼,我假設你必須計劃通過在結果集中的位置而不是他們的名字對列進行消歧。在這種情況下 - 只需從第二個示例中的列別名中刪除尾部數字,這應該是你想要的。 – 2012-03-06 23:06:44