表t
 id    sex    school    government   area  
-----------------------------------------
***    男     中学        团员      北京
***    男     大学        党员      上海
***    女     小学        群众      北京
***    女     中学        群众      天津
***    男     小学        党员      上海
***    女     大学        团员      北京
-------------------------------------------
用一条sql语句输出如下结果(不能用创建表插入数据的形式)
学校    团员         党员         群众    
----------- ----------- 
大学    1           1           0         
小学    0           1           1          
中学    1           0           1           

解决方案 »

  1.   


    select  学校=school,
    团员=sum(case when government='团员' then 1 else 0 end),
    党员=sum(case when government='党员' then 1 else 0 end),
    群众=sum(case when government='群众' then 1 else 0 end)
    from 表t
    group by school
      

  2.   

    select school 学校,
      sum(case when government = '团员' then 1 else 0 end) 团员,
      sum(case when government = '党员' then 1 else 0 end) 党员,
      sum(case when government = '群众' then 1 else 0 end) 群众
    from t
    group by school
      

  3.   

    declare @sql varchar(8000)
    set @sql = 'select school 学校'
    select @sql = @sql + ' , sum(case government when ''' + government + ''' then Result end) [' + government + ']'
    from (select distinct government from t) as a
    set @sql = @sql + ' from t group by school'
    exec(@sql)
      

  4.   

    create table 表t(id varchar(10),sex varchar(10),school varchar(10),government varchar(10),area varchar(10))
    insert 表t
    select 1,'男','中学','团员','北京'
    union select 2,'男','大学','党员','上海'
    union select 3,'女','小学','群众','北京'
    union select 4,'女','中学','群众','天津'
    union select 5,'男','小学','党员','上海'
    union select 6,'女','大学','团员','北京'
    select  学校=school,
    团员=sum(case when government='团员' then 1 else 0 end),
    党员=sum(case when government='党员' then 1 else 0 end),
    群众=sum(case when government='群众' then 1 else 0 end)
    from 表t
    group by schooldrop table 表t/*               结果
    学校         团员          党员          群众          
    ---------- ----------- ----------- ----------- 
    大学         1           1           0
    小学         0           1           1
    中学         1           0           1(3 row(s) affected)
    */
      

  5.   

    create table tab(id varchar(3),sex varchar(2),school varchar(10),gowernment varchar(4),area varchar(10))
    insert tab
    select '001','男','中学','团员','北京'
    union all 
    select '002','男','大学','党员','上海'
    union all 
    select '003','女','小学','群众','北京'
    union all 
    select '004','女','中学','群众','天津'
    union all 
    select '005','男','小学','党员','上海'
    union all 
    select '006','女','大学','团员','北京'select * from tabselect  school
           ,sum(case gowernment when '团员' then 1 else 0 end) AS 团员
           ,sum(case gowernment when '群众' then 1 else 0 end) AS 群众
           ,sum(case gowernment when '党员' then 1 else 0 end) AS 党员
    from tab
    group by schooldrop table tab
      

  6.   


    (6 行受影响)
    id   sex  school     gowernment area
    ---- ---- ---------- ---------- ----------
    001  男    中学         团员         北京
    002  男    大学         党员         上海
    003  女    小学         群众         北京
    004  女    中学         群众         天津
    005  男    小学         党员         上海
    006  女    大学         团员         北京(6 行受影响)学校         团员          群众          党员
    ---------- ----------- ----------- -----------
    大学         1           0           1
    小学         0           1           1
    中学         1           1           0(3 行受影响)
      

  7.   

    create table tb(id varchar(10),sex varchar(10),school varchar(10),government varchar(10),area varchar(10))
    insert into tb values('***',    '男',     '中学',        '团员',      '北京')
    insert into tb values('***',    '男',     '大学',        '党员',      '上海')
    insert into tb values('***',    '女',     '小学',        '群众',      '北京')
    insert into tb values('***',    '女',     '中学',        '群众',      '天津')
    insert into tb values('***',    '男',     '小学',        '党员',      '上海')
    insert into tb values('***',    '女',     '大学',        '团员',      '北京')
    go
    select school 学校,
      sum(case when government = '团员' then 1 else 0 end) 团员,
      sum(case when government = '党员' then 1 else 0 end) 党员,
      sum(case when government = '群众' then 1 else 0 end) 群众
    from tb
    group by school
    go
    declare @sql varchar(8000)
    set @sql = 'select school 学校'
    select @sql = @sql + ' , sum(case government when ''' + government + ''' then 1 else 0 end) [' + government + ']'
    from (select distinct government from tb) as a
    set @sql = @sql + ' from tb group by school'
    exec(@sql)drop table tb/*
    学校         团员          党员          群众          
    ---------- ----------- ----------- ----------- 
    大学         1           1           0
    小学         0           1           1
    中学         1           0           1(所影响的行数为 3 行)学校         党员          群众          团员          
    ---------- ----------- ----------- ----------- 
    大学         1           0           1
    小学         1           1           0
    中学         0           1           1
    */
      

  8.   

    create table t(id varchar(10),sex varchar(10),school varchar(10),government varchar(10),area varchar(10))
    insert t
    select 1,'男','中学','团员','北京'
    union select 2,'男','大学','党员','上海'
    union select 3,'女','小学','群众','北京'
    union select 4,'女','中学','群众','天津'
    union select 5,'男','小学','党员','上海'
    union select 6,'女','大学','团员','北京'declare @sql varchar(8000)
    set @sql = 'select school 学校'
    select @sql = @sql + ',' + government + '=sum(case government when ''' + government + ''' then 1 else 0 end)'
    from (select distinct government from t) as a
    set @sql = @sql + ' from t group by school'
    exec(@sql)drop table t
    /*        结果
    学校         党员          群众          团员          
    ---------- ----------- ----------- ----------- 
    大学         1           0           1
    小学         1           1           0
    中学         0           1           1
    */