表结构:
学号 学校 专业 年级
----------------------------------------------
01 学校一 专业一 2009
02 学校三 专业二 2010
03 学校二 专业一 2010
04 学校一 专业一 2010
要求分 学校 ,按 年级、专业 统计人数:---------------------------------------------
学校一
年级 专业一
---------------------------------------------
2009 1
2010 1---------------------------------------------
学校二
年级 专业一
---------------------------------------------
2010 1---------------------------------------------
学校三
年级 专业二
---------------------------------------------
2010 1
求sql……
学号 学校 专业 年级
----------------------------------------------
01 学校一 专业一 2009
02 学校三 专业二 2010
03 学校二 专业一 2010
04 学校一 专业一 2010
要求分 学校 ,按 年级、专业 统计人数:---------------------------------------------
学校一
年级 专业一
---------------------------------------------
2009 1
2010 1---------------------------------------------
学校二
年级 专业一
---------------------------------------------
2010 1---------------------------------------------
学校三
年级 专业二
---------------------------------------------
2010 1
求sql……
select 学校,专业,年级,count(distinc 学号) as 人数
from tb
group by 学校,专业,年级
from tb
group by 学校,专业,年级
--老大为啥还要distinct 呢? 一个人选了两个专业?
年级 专业 一 专业二 专业三 专业四
2009 20 19 33
2010 89 78 77可能还有专业五 专业六,但是该学校所有年级都没有该专业的学生,所以不显示……
分学校可以不在同一个sql里,求的这个sql只要可以根据 具体学校 生成上面的结构就可以了 貌似涉及行专列 等高手解答……
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
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
*/