表结构:
  学号        学校        专业        年级
----------------------------------------------
  01         学校一      专业一       2009
  02         学校三      专业二       2010
  03         学校二      专业一       2010
  04         学校一      专业一       2010
要求分 学校 ,按 年级、专业 统计人数:---------------------------------------------
学校一
 年级        专业一        
---------------------------------------------
 2009          1
 2010          1---------------------------------------------
学校二
 年级        专业一        
---------------------------------------------
  2010          1---------------------------------------------
学校三
 年级        专业二        
---------------------------------------------
 2010          1
求sql……

解决方案 »

  1.   


    select 学校,专业,年级,count(distinc 学号) as 人数
    from tb
    group by 学校,专业,年级
      

  2.   

    select 学校,专业,年级,count(distinct 学号) as 人数
    from tb
    group by 学校,专业,年级
    --老大为啥还要distinct 呢? 一个人选了两个专业?
      

  3.   

    感谢楼上的回复,我意思没表达清楚,最后要求 为每一个学校生成一张表,表的格式为:某个学校:
    年级                     专业 一                      专业二                                         专业三                                   专业四
    2009                          20                            19                                                33
    2010                                                          89                                                78                                       77可能还有专业五 专业六,但是该学校所有年级都没有该专业的学生,所以不显示……
    分学校可以不在同一个sql里,求的这个sql只要可以根据 具体学校 生成上面的结构就可以了 貌似涉及行专列  等高手解答……
      

  4.   


    USE [test]
    GO/****** Object:  Table [dbo].[xsxx]    Script Date: 07/27/2011 13:05:05 ******/
    SET ANSI_NULLS ON
    GOSET QUOTED_IDENTIFIER ON
    GOSET ANSI_PADDING ON
    GOCREATE TABLE [dbo].[xsxx](
    [xh] [int] NOT NULL,
    [xx] [varchar](50) NOT NULL,
    [zy] [varchar](50) NOT NULL,
    [nj] [varchar](50) NOT NULL
    ) ON [PRIMARY]GOSET ANSI_PADDING OFF
    GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'学号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'xsxx', @level2type=N'COLUMN',@level2name=N'xh'
    GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'学校' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'xsxx', @level2type=N'COLUMN',@level2name=N'xx'
    GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'专业' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'xsxx', @level2type=N'COLUMN',@level2name=N'zy'
    GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'学生信息' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'xsxx'
    GO
      

  5.   

    create table tb(学号 varchar(2),学校 varchar(10), 专业 varchar(10),年级 int)
    insert tb
    select '01','学校一','专业一', 2009 union all
    select '02','学校三','专业二', 2010 union all
    select '03','学校二','专业一', 2010 union all
    select '04','学校一','专业一', 2010declare @sql varchar(8000)
    set @sql = 'select 年级 '
    select @sql = @sql + ' , max(case 专业 when ''' + 专业 + ''' then 1 else 0 end) [' + 专业 + ']'
    from (select distinct top 100 percent 专业 from tb order by 专业 desc) as a
    set @sql = @sql + ' from tb group by 年级'
    exec(@sql) /*
    年级          专业一         专业二         
    ----------- ----------- ----------- 
    2009        1           0
    2010        1           1
    */
      

  6.   

    http://blog.csdn.net/vipxiaotian/article/details/4409423
      

  7.   

    sum