【问题标题】:Group totals in a sql pivot table在 sql 数据透视表中分组总计
【发布时间】:2012-03-08 05:32:41
【问题描述】:

我正在尝试在此数据透视表中创建组总计

            create table test5(city nvarchar(10), race nvarchar(30), sex nvarchar(10), age int)
            insert into test5 values ('Austin',  'African-American', 'male', 21)
            insert into test5 values ('Austin',  'Asian', 'female', 22)
            insert into test5 values ('Austin',  'Caucasian', 'male', 23)
            insert into test5 values ('Austin',  'Hispanic', 'female', 24)
            insert into test5 values ('Austin',  'African-American', 'Unknown', 25)
            insert into test5 values ('Austin',  'Asian', 'male', 26)
            insert into test5 values ('Austin',  'Caucasian', 'female', 27)
            insert into test5 values ('Austin',  'Hispanic', 'Unknown', 28)
            insert into test5 values ('Austin',  'Asian', 'male', 29)
            insert into test5 values ('Austin',  'Caucasian', 'female', 31)
            insert into test5 values ('Dallas',  'Hispanic', 'Unknown', 32)
            insert into test5 values ('Dallas',  'African-American', 'male', 33)
            insert into test5 values ('Dallas',  'Asian', 'female', 34)
            insert into test5 values ('Dallas',  'Caucasian', 'Unknown', 35)
            insert into test5 values ('Dallas',  'Hispanic', 'male', 500)
            insert into test5 values ('Dallas',  'African-American', 'female', 36)
            insert into test5 values ('Dallas',  'Asian', 'Unknown', 37)
            insert into test5 values ('Dallas',  'Caucasian', 'male', 38)
            insert into test5 values ('Dallas',  'Hispanic', 'female', 39)
            insert into test5 values ('Dallas',  'African-American', 'Unknown', 41)
            insert into test5 values ('Houston',  'Asian', 'male', 42)
            insert into test5 values ('Houston',  'Caucasian', 'female', 43)
            insert into test5 values ('Houston',  'Hispanic', 'Unknown', 44)
            insert into test5 values ('Houston',  'African-American', 'male', 45)
            insert into test5 values ('Houston',  'Asian', 'female', 46)
            insert into test5 values ('Houston',  'Caucasian', 'Unknown', 47)
            insert into test5 values ('Houston',  'Hispanic', 'male', 48)
            insert into test5 values ('Houston',  'African-American', 'female', 49)
            insert into test5 values ('Houston',  'Asian', 'Unknown', 51)
            insert into test5 values ('Houston',  'Caucasian', 'male', 52);


    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 test5 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

我需要将它们设置为这样的格式,并在顶部显示组总数。

我将把枢轴放在一个 radgrid 中,所以如果有办法在网格中或使用 C# 来做,那也很好。任何建议都会有所帮助,因为我基本上正在寻找任何方法来实现这一点。提前致谢

【问题讨论】:

    标签: c# sql-server-2008 radgrid pivot-table


    【解决方案1】:

    您可以尝试使用类似这样的查询:

    select city, sex,
    count(case when race = 'African-American' and age between 20 and 30 then 1 else null end) as [20_30_African-American],
    count(case when race = 'Asian' and age between 20 and 30 then 1 else null end) as [20_30_Asian],
    count(case when race = 'Caucasian' and age between 20 and 30 then 1 else null end) as [20_30_Caucasian],
    count(case when race = 'Hispanic' and age between 20 and 30 then 1 else null end) as [20_30_Hispanic]
    -- add all other columns here
    from test5
    group by city, sex WITH ROLLUP
    order by city, sex
    

    【讨论】:

    • 我没关注,select语句应该在“WITH T AS”选择还是在它下面?
    • 您能否提供一个工作示例,因为我不完全理解。谢谢
    • 您是否尝试过上述查询?运行此查询,您将了解下一步该做什么。为所有其他组添加列 31_40、41_50,我给了你一个包含前四列的工作示例。
    • 好的,我让它工作了。这是完美的,除了第一行是重复的。有没有办法摆脱它?谢谢sqlfiddle.com/#!3/8c1e8/3
    • 你可以这样做 - SELECT * FROM T where NULLIF(city,'') IS NOT NULL
    猜你喜欢
    • 2022-12-19
    • 1970-01-01
    • 2021-03-28
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2018-06-24
    相关资源
    最近更新 更多