sql多排名序号列的问题

jianglai11 2009-01-06 11:27:55


这样个表结构,是一个成绩记录的表,id为自增标示,

userid表示学生的id,classid表示课程的id,classvalues标示这个学生的这门课程的考试成绩

打算一句sql出下面这样的结果



有没有哪位高手帮忙解决一下谢谢了。

分数倾囊相送

下面是脚本sql

USE [test]
GO
/****** 对象: Table [dbo].[Record] 脚本日期: 01/06/2009 10:22:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Record](
[id] [int] IDENTITY(1,1) NOT NULL,
[userId] [int] NULL,
[classId] [int] NULL,
[ClassValues] [int] NULL
) ON [PRIMARY]
USE [test]
GO
/****** 对象: Table [dbo].[User] 脚本日期: 01/06/2009 10:23:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[User](
[id] [int] NULL,
[name] [nchar](10) NULL,
[orderCode] [int] NULL
) ON [PRIMARY]
USE [test]
GO
/****** 对象: Table [dbo].[Class] 脚本日期: 01/06/2009 10:23:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Class](
[Id] [int] NULL,
[className] [nchar](10) NULL
) ON [PRIMARY]

提问者:汤包 - 初学一级
问题补充:用户名和课程名,比如语文,数学,政治都是单独存在其他表中的
要实现复合表头,(最好能自动出表头),和多个排名是必须的。而且前面的学生姓名是按照拼音或者其他一定规律定好的顺序,而且成绩排名是每个学科从高分到低分进行的排名。排名不能打乱学生姓名的排列顺序

...全文
162 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
alex_zs 2009-01-06
  • 打赏
  • 举报
回复
楼上是强淫,顶
jinjazz 2009-01-06
  • 打赏
  • 举报
回复
--建立测试环境
set nocount on
create table testRecord(id int,userid int,classid int,classvalue int)
insert into testRecord select '1','2','1','80'
insert into testRecord select '2','3','1','70'
insert into testRecord select '3','4','1','60'
insert into testRecord select '4','2','2','50'
insert into testRecord select '5','3','2','40'
insert into testRecord select '6','4','2','30'
insert into testRecord select '7','2','3','20'
insert into testRecord select '8','3','3','10'
insert into testRecord select '9','4','3','90'
go
create table testUser(id int,name varchar(10))
insert into testUser select 2,'张三'
insert into testUser select 3,'李四'
insert into testUser select 4,'王五'

create table testClass(id int,classname varchar(10))
insert into testClass select 1,'语文'
insert into testClass select 2,'数学'
insert into testClass select 3,'英语'
--测试

select name
,max(case when classid=1 then classvalue else 0 end)语文
,max(case when classid=1 then rank else 0 end)排名
,max(case when classid=2 then classvalue else 0 end)数学
,max(case when classid=2 then rank else 0 end)排名
,max(case when classid=3 then classvalue else 0 end)英语
,max(case when classid=3 then rank else 0 end)排名
from(
select *,rank=RANK()over(partition by classname order by classvalue desc) from(
select a.userid,b.name,a.classid,c.classname,a.classvalue
from testRecord a,testUser b,testClass c
where a.userid=b.id and a.classid=c.id
)a)b
group by name,userid order by userid




--删除测试环境
drop table testRecord
drop table testUser
drop table testClass
set nocount off

/*
name 语文 排名 数学 排名 英语 排名
---------- ----------- -------------------- ----------- -------------------- ----------- --------------------
张三 80 1 50 1 20 2
李四 70 2 40 2 10 3
王五 60 3 30 3 90 1


*/
cyz9977 2009-01-06
  • 打赏
  • 举报
回复
去sql server區發貼吧
高手如云。。。
MicroDeviser 2009-01-06
  • 打赏
  • 举报
回复
顶,10分到手
wuyq11 2009-01-06
  • 打赏
  • 举报
回复
通过存储过程实现,建立临时表。通过游标循环
zpcoder 2009-01-06
  • 打赏
  • 举报
回复

正好跟我的这个一样。我可是花了 200 分啊,现在与你分享。

http://topic.csdn.net/u/20090102/10/4bd1a02a-0a0a-40a5-a8e6-a76d3784a0ba.html
homesos 2009-01-06
  • 打赏
  • 举报
回复
图片看不到 想要什么效果啊
HDNGO 2009-01-06
  • 打赏
  • 举报
回复
。。。干嘛不去SQL版问。。。
takako_mu 2009-01-06
  • 打赏
  • 举报
回复
找dawugui去- -#媒婆給10分。。
xfreyes 2009-01-06
  • 打赏
  • 举报
回复
太长了,看晕了
jianglai11 2009-01-06
  • 打赏
  • 举报
回复
一个字 “强”
一、 数据库介绍 1 1.1表是数据库中存储数据的基本单位 1 1.2数据库标准语言 1 1.3数据库(DB) 1 1.4数据库种类 1 1.5数据库中如何定义表 1 1.6 create database dbname的含义 1 1.7安装DBMS 1 1.8宏观上是数据-->database 1 1.9远程登录:telnet IP地址 1 1.10 TCP/IP通信协议 2 1.11数据库建连接必须提供以下信息 2 1.12一台机器可跑几个数据库,主要受内存大小影响 2 1.13源表和结果集 2 1.14几个简单命令 2 1.15 tarena给jsd1304授权 2 1.16课程中使用的5个表 3 二、 select from语句 5 2.1 select语句功能 5 2.2 select语句基本语法 5 2.3别名 5 2.4算术表达式 5 2.5空值null的处理 5 2.6 nvl(p1,p2)函数 5 2.7拼接运算符 || 6 2.8文字字符串 6 2.9消除重复行 6 2.10其他注意事项 6 三、 SQL语句的处理过程 7 3.1 SQL语句处理过程 7 3.2处理一条select语句 7 四、 where子句 8 4.1 where子句后面可以跟什么 8 4.2语法和执行顺序 8 4.3字符串是大小写敏感的,在比较时严格区分大小写 8 4.4 where子句后面可以跟多个条件表达式 8 4.5 between and运算符 8 4.6 in运算符(多值运算符) 8 4.7 like运算符 9 4.8 is null运算符 9 4.9比较和逻辑运算符(单值运算符) 9 4.10多值运算符all、any 9 4.11运算符的否定形式 9 五、 order by子句 10 5.1语法和执行顺序 10 5.2升降序 10 5.3 null值在排序中显示 10 5.4 order by后面可以跟什么 10 5.5多排序 10 六、 单行函数的使用 11 6.1数值类型 11 6.2日期类型 11 6.3字符类型 13 6.4转换函数 14 6.5其他注意事项 14 七、 SQL语句中的分支 15 7.1分支表达式 15 7.2分支函数 15 八、 组函数 16 8.1报表统计常用 16 8.2缺省情况组函数处理什么值 16 8.3当组函数要处理的所有值都为null时 16 8.4行级信息和组级信息 16 九、 group by子句 17 9.1语法和执行顺序 17 9.2分组过程 17 9.3常见错误 17 9.4多分组 17 十、 having子句 18 10.1语法和执行顺序 18 10.2执行过程 18 10.3 where和having区别 18 十一、 非关联子查询 19 11.1语法 19 11.2子查询的执行过程 19 11.3常见错误 19 11.4子查询与空值 19 11.5多子查询 20 十二、 关联子查询 21 12.1语法 21 12.2执行过程 21 12.3 exists 21 12.4 exists执行过程 21 12.5 not exists 22 12.6 not exists执行过程 22 12.7 in和exists比较 22 十三、 多表查询 23 13.1按范式要求设计表结构 23 13.2多表连接的种类 23 13.3交叉连接 23 13.4内连接 23 13.5外连接 25 13.6非等值连接 27 13.7表连接总结 27 十四、 集合 28 14.1表连接主要解决的问题 28 14.2集合运算 28 14.3集合运算符 28 14.4子查询、连接、集合总结 29 十五、 排名分页问题 30 15.1什么是rownum 30 15.2 where rownum<=5的执行过程 30 15.3 where rownum=5的执行过程 30 十六、 约束constraint 31 16.1约束的类型 31 16.2 primary key:主键约束 31 16.3 not null:非空约束 31 16.4 unique key:唯一建约束 31 16.5 references foreign key:外键约束 32 16.6 check:检查约束 34 十七、 事务 35 17.1 transaction 35 17.2定义 35 17.3事务的特性:ACID 35 17.4事务的隔离级别 35 17.5数据库开发的关键挑战 35 17.6锁的概念 36 17.7 Oracle的锁机制 36 17.8事务不提交的后果 36 17.9回滚事务rollback 36 17.10保留点savepoint 36 十八、 数据库对象:视图view 37 18.1带子查询的create table 37 18.2带子查询的insert 37 18.3定义缺省值:default 37 18.4 视图view 38 18.5视图的应用场景 38 18.6视图的分类 39 18.7视图的维护 39 十九、 数据库对象:索引index 41 19.1创建index 41 19.2扫描表的方式 41 19.3索引的结构 41 19.4为什么要使用索引 42 19.5哪些适合建索引 42 19.6索引的类型 42 19.7哪些写法会导致索引用不了 43 二十、 数据库对象:序号sequence 44 20.1什么是sequence 44 20.2创建sequence 44 20.3缺省是nocycle(不循环) 44 20.4缺省cache 20 44 二十一、 其他注意事项 46 21.1删除表,删除,删除中的值 46 21.2多对多关系的实现 46 21.3一对多(两张表) 46 21.4一对一 46 21.5数据库对象 46 12.6缺省(默认)总结: 46

62,249

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧