首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

真正的专业有关问题待答

2012-01-30 
真正的专业问题待答表A:UserIDvarchar(50)//学生编码ClassIDvarchar(50)//班级编码UserNamevarchar(50)//

真正的专业问题待答
表A:
UserID   varchar(50)   //学生编码
ClassID   varchar(50)   //班级编码
UserName   varchar(50)   //姓名
TypeID   varchar(50)   //所属组

数据内容如下:
UserID   ClassID   UserName   TypeID
1001       1               张三           10
1002       2               李四           11
1003       3               王五           12
1004       4               赵六           12
1006       3               韩七           11
1007       2               马八           13

表B:
ClassID   varchar(50)
ClassName   varchar(50)

数据内容如下:
ClassID   ClassName
1               一班
2               二班
3               三班
4               四班
表C:
TypeID   varchar(50)
TypeName   varchar(50)

数据内容如下:
TypeID   TypeName
10           第一组
11           第二组
12           第三组
13           第四组

现在的要求是统计出如下的表:

班级     第一组人数     第二组人数     第三组人数     第四组人数     合计
一班     1                       1                       2                       1                         5
二班     2                       1                       2                       3                         8
三班     1                       3                       1                       1                         6
四班     3                       3                       2                       1                         9

各位老大,这是我辛苦手工写出来的,很多系统统计经常用到的功能,但是大多数都是一个一个字段的统计,极费资源,大家好好看看,如何用最少的SQL实现,并达到最佳资源利用?

[解决办法]
--楼主给的数据和你要的结果不对啊!

drop table 表A,表B,表C
go
create table 表A(UserID varchar(50),ClassID varchar(50),UserName varchar(50),TypeID varchar(50))
insert into 表A
select '1001 ', '1 ', '张三 ',10
union all select '1002 ', '2 ', '李四 ',11


union all select '1003 ', '3 ', '王五 ',12
union all select '1004 ', '4 ', '赵六 ',12
union all select '1006 ', '3 ', '韩七 ',11
union all select '1007 ', '2 ', '马八 ',13

create table 表B(ClassID varchar(50),ClassName varchar(50))
insert into 表B
select '1 ', '一班 '
union all select '2 ', '二班 '
union all select '3 ', '三班 '
union all select '4 ', '四班 '

create table 表C(TypeID varchar(50),TypeName varchar(50))
insert into 表C
select '10 ', '第一组 '
union all select '11 ', '第二组 '
union all select '12 ', '第三组 '
union all select '13 ', '第四组 '

declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ ',sum(case when TypeName= ' ' '+TypeName+ ' ' ' then 1 else 0 end) as ' ' '+TypeName+ '人数 ' ' '
from 表C
exec( 'select ClassName '+@sql+ ',(select count(*) from 表A a where a.ClassID=表A.ClassID) as ' '合计 ' ' from 表A,表B,表C where 表A.ClassID=表B.ClassID and 表A.TypeID=表C.TypeID group by 表A.ClassID,ClassName ')

/*
ClassName 第一组人数 第二组人数 第三组人数 第四组人数 合计
---------------- ----------- ----------- ----------- ----------- -----------
一班 1 0 0 0 1
二班 0 1 0 1 2
三班 0 1 1 0 2
四班 0 0 1 0 1
*/

热点排行