有一张表,表名为stu信息如下示name         grade         sex           national
周1         一年级         男              汉族
周2         一年级         男              汉族
周3         一年级         女             少数民族
周4         二年级         男             汉族
周5         二年级         女             少数民族
周6         二年级         男             少数民族
周7         一年级         女             汉族
周8         二年级         男             汉族
周9         二年级         女             少数民族
周10        三年级         男            汉族
周11        一年级         女            少数民族
周12        一年级         男            汉族
周13        三年级         女            少数民族
要求查询结果如下示分类       一年级        二年级         三年级
 女          ?             ?              ?
 少数民族    ?             ?              ?
问号代表的是人数。希望大家帮忙写一下。

解决方案 »

  1.   

    select sex,[national],
    sum(case when [grade]='一年级' then 1 else 0 end) as 一年级,
    sum(case when [grade]='二年级' then 1 else 0 end) as 二年级,
    sum(case when [grade]='三年级' then 1 else 0 end) as 三年级
    from TB
    group by sex,[national]
    参考着改 要是还不会那就 搜索行列转换
      

  2.   

    select sex as 类别,
    sum(case when [grade]='一年级' then 1 else 0 end) as 一年级,
    sum(case when [grade]='二年级' then 1 else 0 end) as 二年级,
    sum(case when [grade]='三年级' then 1 else 0 end) as 三年级
    from TB
    group by sex
    union all
    select national as 类别,
    sum(case when [grade]='一年级' then 1 else 0 end) as 一年级,
    sum(case when [grade]='二年级' then 1 else 0 end) as 二年级,
    sum(case when [grade]='三年级' then 1 else 0 end) as 三年级
    from TB
    group by national
      

  3.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2011-03-25 16:13:46
    -- Verstion:
    --      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
    -- Jul  9 2008 14:43:34 
    -- Copyright (c) 1988-2008 Microsoft Corporation
    -- Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([name] varchar(4),[grade] varchar(6),[sex] varchar(2),[national] varchar(8))
    insert [tb]
    select '周1','一年级','男','汉族' union all
    select '周2','一年级','男','汉族' union all
    select '周3','一年级','女','少数民族' union all
    select '周4','二年级','男','汉族' union all
    select '周5','二年级','女','少数民族' union all
    select '周6','二年级','男','少数民族' union all
    select '周7','一年级','女','汉族' union all
    select '周8','二年级','男','汉族' union all
    select '周9','二年级','女','少数民族' union all
    select '周10','三年级','男','汉族' union all
    select '周11','一年级','女','少数民族' union all
    select '周12','一年级','男','汉族' union all
    select '周13','三年级','女','少数民族'
    --------------开始查询--------------------------
    select 
        sex,[national],
        sum(case when [grade]='一年级' then 1 else 0 end) as 一年级,
        sum(case when [grade]='二年级' then 1 else 0 end) as 二年级,
        sum(case when [grade]='三年级' then 1 else 0 end) as 三年级
    from 
        tb
    group by
         sex,[national]----------------结果----------------------------
    /* sex  national 一年级         二年级         三年级
    ---- -------- ----------- ----------- -----------
    男    汉族       3           2           1
    女    汉族       1           0           0
    男    少数民族     0           1           0
    女    少数民族     2           2           1(4 行受影响)*/