2012-03-07 1 views
3

나는이 결과를SQL 피벗 테이블은 오전에

1 http://img853.imageshack.us/img853/8112/sqltotal.jpg

유일한 예를 달성하기 위해 노력하고

 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 

이 피벗 테이블에 행과 열 합계를 추가하려고 합계 Google에서 SQL 2000 용으로 작성된 저장 프로 시저를 찾을 수 있습니다. 도와주세요! 사전

+1

을 작동하고, 맞죠? –

+1

예, 저는 총합을 만들려고합니다. 의 – user973671

+1

가능한 중복 [할 수 있습니다 피벗 테이블에서 합계 행 및/또는 열?] (http://stackoverflow.com/questions/7925748/can-you-subtotal-rows-and-or-columns-in-a- 피벗 테이블) – bummi

답변

8
여기

당신이 시도. 스크립트가

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 *, ([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]) Total 
into #tmp_result 
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 

select * 
from #tmp_result 
union all 
select 'Grand Total','',SUM([20-30_African-American]), SUM([20-30_Asian]), SUM([20-30_Caucasian]), SUM([20-30_Hispanic]),SUM([31-40_African-American]), SUM([31-40_Asian]), SUM([31-40_Caucasian]), SUM([31-40_Hispanic]),SUM([41-50_African-American]), SUM([41-50_Asian]), SUM([41-50_Caucasian]),SUM([41-50_Hispanic]), sum(Total) 
from #tmp_result 
+1

이것은 완벽합니다, 대단히 감사합니다. – user973671

+1

정말 간단하고 좋지만 매개 변수를 수정할 수 있습니까? 동적 열과 함께 사용할 수 있습니다. – Rapunzo

2

다음과 같이 시도하십시오 감사드립니다 ..

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 *, ([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]) Total 
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

이 좋지만, 가능하면 나는 또한 감사 – user973671

+1

는 그런 다음 임시 테이블에이 결과를 계속해야, 바닥의 열을위한 총 필요합니다. 그 후, 수 있도록 노조 스크립트 ([20-30_African 미국), 등 –

+1

당신이 예를 제공 할 수 있습니다, ''합 '전체'를 선택 ...인가? 나는 그것을 완전히 이해하지 못해 미안합니다. 감사합니다 – user973671