有一表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.   

    select a.*, 涨跌分  = 分数 - isnull((select top 1 分数 from t_sore where 姓名 = a.姓名 and 编号 < a. 编号 order by 编号 desc),分)
    from t_sore a
    where 姓名 = 'AA' 
      

  2.   

    select a.*, 涨跌分  = 分数 - isnull((select top 1 分数 from t_sore where 姓名 = a.姓名 and 编号 < a. 编号 order by 编号 desc),分数) 
    from t_sore a 
    where 姓名 = 'AA' 
      

  3.   

    DECLARE @TB TABLE(编号 INT, 姓名 VARCHAR(10), 考试标志  VARCHAR(10),类型 INT, 科目 VARCHAR(10),分数 INT)
    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 行)
    */
      

  4.   

    谢谢,能不能再加一个名次列?
    有一表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
    名次列:就是在那次考试标志下学生在全班的名次
      

  5.   

    SELECT *,涨分=ISNULL(分数-(SELECT TOP 1 分数 FROM @TB WHERE 姓名=A.姓名 AND 编号<A.编号 ORDER BY 编号 DESC),0)
    名称=(SELECT COUNT(1) FROM @TB WHERE 年级=A.年级 AND 班级=A.班级 AND 分数>=A.分数 )
    FROM @TB A
      

  6.   

    下面是我执行的语句,我觉得与5楼的完全一样,可是我的结果却是下面的那样,有兴趣的请看一下.declare @TB table(编号 int, 姓名 varchar(10), 考试标志 varchar(10), 类型 int, 考试科目 varchar(10), 分数 int)
    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
      

  7.   

    SELECT *,涨分=ISNULL(分数-(SELECT TOP 1 分数 FROM @TB WHERE 姓名=A.姓名 AND 科目=A.科目 AND 编号<A.编号 ORDER BY 编号 DESC),0)
    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
      

  8.   

    if object_id('tb') is not null
       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