例如:select * from table结果如下:ID Title
29 AAA
89 BBB
99 CCC我现在需要的结果
ID Title 编号
29 AAA   1
89 BBB   2
99 CCC   3

解决方案 »

  1.   

    --示例数据
    CREATE TABLE tb(Name varchar(10),Score decimal(10,2))
    INSERT tb SELECT 'aa',99
    UNION ALL SELECT 'bb',56
    UNION ALL SELECT 'cc',56
    UNION ALL SELECT 'dd',77
    UNION ALL SELECT 'ee',78
    UNION ALL SELECT 'ff',76
    UNION ALL SELECT 'gg',78
    UNION ALL SELECT 'ff',50
    GO--1. 名次生成方式1,Score重复时合并名次
    SELECT *,Place=(SELECT COUNT(DISTINCT Score) FROM tb WHERE Score>=a.Score)
    FROM tb a
    ORDER BY Place
    /*--结果
    Name       Score        Place 
    ---------------- ----------------- ----------- 
    aa         99.00        1
    ee         78.00        2
    gg         78.00        2
    dd         77.00        3
    ff         76.00        4
    bb         56.00        5
    cc         56.00        5
    ff         50.00        6
    --*/--2. 名次生成方式2,Score重复时保留名次空缺
    SELECT *,Place=(SELECT COUNT(Score) FROM tb WHERE Score>a.Score)+1
    FROM tb a
    ORDER BY Place
    /*--结果
    Name       Score        Place 
    --------------- ----------------- ----------- 
    aa         99.00        1
    ee         78.00        2
    gg         78.00        2
    dd         77.00        4
    ff         76.00        5
    bb         56.00        6
    cc         56.00        6
    ff         50.00        8
    --*/
      

  2.   


    select 
      *,
      编号=(select count(1)+1 from tb where id<t.id)
    from tb t
      

  3.   

    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([ID] int,[Title] varchar(3))
    insert [tb]
    select 29,'AAA' union all
    select 89,'BBB' union all
    select 99,'CCC'select 
      *,
      编号=(select count(1)+1 from tb where id<t.id)
    from tb t
    --测试结果:
    /*
    ID          Title 编号          
    ----------- ----- ----------- 
    29          AAA   1
    89          BBB   2
    99          CCC   3(所影响的行数为 3 行)
    */
      

  4.   

    declare @t table(ID int , Title varchar(200))
    insert @t select 29, 'AAA'
    union all select 89, 'BBB' 
    union all select 99, 'CCC'
    select *,编号=(select count(*) from @t where ID<=a.ID) from @t a order by ID
    /*
    ID     Title   编号
    --     -----   ----
    29 AAA 1
    89 BBB 2
    99 CCC 3
    (3 行受影响)
    */
      

  5.   


    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([ID] int,[Title] varchar(3))
    insert [tb]
    select 29,'AAA' union all
    select 89,'BBB' union all
    select 99,'CCC'select 
      *,
     (ROW_NUMBER() OVER( ORDER BY [Title]))编号
    from tb 
    如果你用的是sql-2005
      

  6.   

    前面几位的from中除了查询的本表以外还有一个a之类的表 这个a是什么意思阿 我用的sql 2005版本 谢谢
      

  7.   

    谢谢 不过我还是不太明白 这个月才开始的tsql学习 请问能不能再详细的说明一下
      

  8.   

    SQL:2005
    select *,(ROW_NUMBER() OVER( ORDER BY [ID])) 编号
    from tb 
      

  9.   


    if object_id('tb') is not null
       drop table tb
    go
    create table tb(id int,title varchar(100))
    go
    insert into tb
    select 29,'AAA' union all
    select 89,'BBB' union all
    select 99,'CCC'
    go
    select *,编号=identity(int,1,1) into # from tb
    select * from #
      

  10.   

    select 
      *,
      编号=(select count(1)+1 from tb where id<t.id)
    from tb t
    order by id结果是这样出来的。这个查询用了表的自连,在本表中,查找id比自己小的纪录又没有,没有的话count(1)就返回0,然后再+1修正这序号。
    表1左            表1右
    id               id
    29               29
    88               88
    99               99
    首先表1左的第一条数据29取出来,到表1右全部记录里去检查,没有找到比29更小的,所以xount(1)返回0,所以编号为1;
    接着表1左的第二条数据88取出来,到表1右全部记录里去检查,找到一条比他小的,所以count(1)返回1,然后再+1得到编号为2
    依次从表1左中取数据,直到扫描完表1左的全部记录位置。
      

  11.   

    如果用的是SQL2005的版本,可以使用排名函数解决相关问题
      

  12.   

    select 编号=identity(int,1,1),table.* into #temptable from table