有一表T_sore:
编号 姓名 考试标志 类型 科目 分数
1 AA 半期考试 1 语文 77
2 AA 期末考试 1 语文 57
3 AA 一单考试 1 语文 90
4 AA 二单考试 1 语文 50
5 BB 半期考试 1 语文 69
6 BB 半期考试 1 数学 89
...
我要查询得到如下表:(假如选择姓名:AA )按编号升序排序
编号 姓名 考试标志 类型 科目 分数 涨跌分
1 AA 半期考试 1 语文 77 0
2 AA 期末考试 1 语文 57 -20
3 AA 一单考试 1 语文 90 +33
4 AA 二单考试 1 语文 50 -40
编号 姓名 考试标志 类型 科目 分数
1 AA 半期考试 1 语文 77
2 AA 期末考试 1 语文 57
3 AA 一单考试 1 语文 90
4 AA 二单考试 1 语文 50
5 BB 半期考试 1 语文 69
6 BB 半期考试 1 数学 89
...
我要查询得到如下表:(假如选择姓名:AA )按编号升序排序
编号 姓名 考试标志 类型 科目 分数 涨跌分
1 AA 半期考试 1 语文 77 0
2 AA 期末考试 1 语文 57 -20
3 AA 一单考试 1 语文 90 +33
4 AA 二单考试 1 语文 50 -40
from t_sore a
where 姓名 = 'AA'
from t_sore a
where 姓名 = 'AA'
INSERT INTO @TB SELECT 1,'AA','半期考试',1,'语文',77
INSERT INTO @TB SELECT 2,'AA','期末考试',1,'语文', 57
INSERT INTO @TB SELECT 3,'AA','一单考试',1,'语文', 90
INSERT INTO @TB SELECT 4,'AA','二单考试',1,'语文', 50
INSERT INTO @TB SELECT 5,'BB','半期考试',1,'语文', 69
INSERT INTO @TB SELECT 6,'BB','半期考试',1,'数学', 89 SELECT *,涨分=ISNULL(分数-(SELECT TOP 1 分数 FROM @TB WHERE 姓名=A.姓名 AND 编号<A.编号 ORDER BY 编号 DESC),0)
FROM @TB A/*编号 姓名 考试标志 类型 科目 分数 涨分
----------- ---------- ---------- ----------- ---------- ----------- -----------
1 AA 半期考试 1 语文 77 0
2 AA 期末考试 1 语文 57 -20
3 AA 一单考试 1 语文 90 33
4 AA 二单考试 1 语文 50 -40
5 BB 半期考试 1 语文 69 0
6 BB 半期考试 1 数学 89 20(所影响的行数为 6 行)
*/
有一表T_sore:
编号 年级 班级 姓名 考试标志 类型 科目 分数
1 初一 1班 AA 半期考试 1 语文 77
2 初一 1班 AA 期末考试 1 语文 57
3 初一 1班 AA 一单考试 1 语文 90
4 初一 1班 AA 二单考试 1 语文 50
5 初一 1班 BB 半期考试 1 语文 69
6 初一 1班 BB 半期考试 1 数学 89
...
我要查询得到如下表:(假如选择姓名:AA )按编号升序排序
编号 年级 班级 姓名 考试标志 类型 科目 分数 涨跌分 名次
1 初一 1班 AA 半期考试 1 语文 77 0 3
2 初一 1班 AA 期末考试 1 语文 57 -20 23
3 初一 1班 AA 一单考试 1 语文 90 +33 12
4 初一 1班 AA 二单考试 1 语文 50 -40 6
名次列:就是在那次考试标志下学生在全班的名次
名称=(SELECT COUNT(1) FROM @TB WHERE 年级=A.年级 AND 班级=A.班级 AND 分数>=A.分数 )
FROM @TB A
insert into @TB select 1, 'AA', '期中考试', 1, '数学', 77
insert into @TB select 2, 'AA', '期末考试', 1, '数学', 57
insert into @TB select 3, 'AA', '一单考试', 1, '数学', 90
insert into @TB select 4, 'AA', '二单考试', 1, '数学', 77
insert into @TB select 5, 'BB', '期中考试', 1, '数学', 58
insert into @TB select 6, 'BB', '期末考试', 1, '语文', 91select *, 超分 = isnull(分数 - (select top 1 分数 from @TB where 姓名=a.姓名 and 编号<a.编号 order by 分数 desc), 0)
from @TB a------------------------------------------------------------------
1 AA 期中考试 1 数学 77 0
2 AA 期末考试 1 数学 57 -20
3 AA 一单考试 1 数学 90 13
4 AA 二单考试 1 数学 77 -13
5 BB 期中考试 1 数学 58 0
6 BB 期末考试 1 语文 91 33
FROM @TB AAA 半期考试 1 语文 77 0
AA 期末考试 1 语文 57 -20
AA 一单考试 1 语文 90 33
AA 二单考试 1 语文 50 -40
BB 半期考试 1 语文 69 0
BB 半期考试 1 数学 89 0
drop table tb
go
create table tb(编号 int,姓名 varchar(10),考试标志 varchar(10),类型 int,科目 varchar(10),分数 int)
go
insert into tb
select 1,'AA','半期考试',1,'语文',77 union all
select 2,'AA','期末考试',1,'语文',57 union all
select 3,'AA','一单考试',1,'语文',90 union all
select 4,'AA','二单考试',1,'语文',50 union all
select 5,'BB','半期考试',1,'语文',69 union all
select 6,'BB','半期考试',1,'数学',89
go
select * from tbselect 编号,姓名,考试标志,类型,科目,分数,涨跌分=case when 涨跌分 is null then '0' when 涨跌分>0 then '+'+cast(涨跌分 as varchar) else cast(涨跌分 as varchar) end from(select 编号,姓名,考试标志,类型,科目,分数,涨跌分=分数-(select top 1 分数 from tb where 编号=a.编号-1 and 科目=a.科目) from tb a where 姓名='AA') aa