我们在SQL查询分析器里查询,比如
select * from T
这样是可以把T的所有记录都查出来,而且在分析器的数据表格里,会有个1,2,3,4行标我现在的问题是,我的查询是排名的,用ORDER BY,可以得到其排名顺序,现在想在记录集里,把排名出来的1,2,3,4等行标做为记录的一列,不知道该怎么处理还麻烦各位高手多多指教

解决方案 »

  1.   

    -->2000
    select id=identity(int,1,1),* into # from T order by ?
    select * from #-->2005
    select id=row_number() over (order by ?),* from T
      

  2.   

    普通行列转换假设有张学生成绩表(t)如下Name Subject Result
    张三 语文  73
    张三 数学  83
    张三 物理  93
    李四 语文  74
    李四 数学  84
    李四 物理  94想变成 
    姓名 语文 数学 物理
    张三 73  83  93
    李四 74  84  94create table #t
    (
       Name    varchar(10) ,
       Subject varchar(10) ,
       Result  int
    )insert into #t(Name , Subject , Result) values('张三','语文','73')
    insert into #t(Name , Subject , Result) values('张三','数学','83')
    insert into #t(Name , Subject , Result) values('张三','物理','93')
    insert into #t(Name , Subject , Result) values('李四','语文','74')
    insert into #t(Name , Subject , Result) values('李四','数学','83')
    insert into #t(Name , Subject , Result) values('李四','物理','93')declare @sql varchar(8000)
    set @sql = 'select Name as ' + '姓名'
    select @sql = @sql + ' , sum(case Subject when ''' + Subject + ''' then Result end) [' + Subject + ']'
    from (select distinct Subject from #t) as a
    set @sql = @sql + ' from #t group by name'
    exec(@sql) drop table #t--结果
    姓名       数学        物理        语文          
    ---------- ----------- ----------- ----------- 
    李四       83          93          74
    张三       83          93          73
     
    ----------------------------------------------------
    如果上述两表互相换一下:即姓名 语文 数学 物理
    张三 73  83  93
    李四 74  84  94想变成 
    Name Subject Result
    张三 语文  73
    张三 数学  83
    张三 物理  93
    李四 语文  74
    李四 数学  84
    李四 物理  94create table #t
    (
       姓名 varchar(10) ,
       语文 int ,
       数学 int ,
       物理 int
    )insert into #t(姓名 , 语文 , 数学 , 物理) values('张三',73,83,93)
    insert into #t(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94)select 姓名 as Name,'语文' as Subject,语文 as Result from #t union
    select 姓名 as Name,'数学' as Subject,数学 as Result from #t union
    select 姓名 as Name,'物理' as Subject,物理 as Result from #t
    order by 姓名 desc drop table #t
     
    --结果
    Name       Subject Result      
    ---------- ------- ----------- 
    张三       数学    83
    张三       物理    93
    张三       语文    73
    李四       数学    84
    李四       物理    94
    李四       语文    74(所影响的行数为 6 行)
      

  3.   

    楼上理解错了,不是行列转换呀
    请看下我的代码select cEmployee.EmployeeName,cCard.PressWorkID,Sum(ConsumeMoney) as ConsumeMOney  from
    eConsumeData
    left Join cCard on cCard.CardID=eConsumeData.CardID
    left Join cEmployee on cEmployee.MaincardID=cCard.CardID
    group By cEmployee.EmployeeName,cCard.PressWorkID
    order By ConsumeMOney desc我是根据ConsumeMOney 来排序的,但是这样我的记录里只有cEmployee.EmployeeName,cCard.PressWorkID,Sum(ConsumeMoney)着三个字段,我想把顺序也作为一列,放在记录里
      

  4.   

    select id=identity(int,1,1),* into # from T order by ? 
    select * from # 我这样查出来的ID,并不是排序所得到的顺序呀
    是乱的
      

  5.   

    select id=identity(int,1,1),cEmployee.EmployeeName,cCard.PressWorkID,Sum(ConsumeMoney) as ConsumeMOney into # from
    eConsumeData
    left Join cCard on cCard.CardID=eConsumeData.CardID
    left Join cEmployee on cEmployee.MaincardID=cCard.CardID
    group By cEmployee.EmployeeName,cCard.PressWorkID
    order By 4 desc --用字段位置序号排序select * from #
      

  6.   

    order By ConsumeMOney desc
    并不等于 order by sum(ConsumeMOney) desc
      

  7.   


    我这样测试,结果得到的ID和我正常查询出来的ID不一样啊,也就是说,这个ID,并不是我排序出来的ID
      

  8.   

    -->那就用子查询,反正效率是一样的:select id=identity(int,1,1),* into # from
    (
    select cEmployee.EmployeeName,cCard.PressWorkID,Sum(ConsumeMoney) as ConsumeMOney into # from
    eConsumeData
    left Join cCard on cCard.CardID=eConsumeData.CardID
    left Join cEmployee on cEmployee.MaincardID=cCard.CardID
    group By cEmployee.EmployeeName,cCard.PressWorkID
    ) t
    order by ConsumeMOney
      

  9.   


    drop table #t
    create table #t
    (
       姓名 varchar(10) ,
       语文 int
    )insert into #t(姓名 , 语文 ) values('张三',73)
    insert into #t(姓名 , 语文 ) values('李四',99)
    insert into #t(姓名 , 语文 ) values('王十',12)
    insert into #t(姓名 , 语文 ) values('李三',34)
    insert into #t(姓名 , 语文 ) values('赵六',56)
    insert into #t(姓名 , 语文 ) values('目一',15)
    insert into #t(姓名 , 语文 ) values('人人',100)
    insert into #t(姓名 , 语文 ) values('我产',78)
    drop table #2select id=identity(int,1,1),* into #2
    from #t
    order by 语文select *
    from #2/*
    id          姓名         语文          
    ----------- ---------- ----------- 
              1 王十                  12 
              2 目一                  15 
              3 李三                  34 
              4 赵六                  56 
              5 张三                  73 
              6 我产                  78 
              7 李四                  99 
              8 人人                 100 (所影响的行数为 8 行)
    */
      

  10.   

    select Id = indentity(int,1,1),* into #tableName From TableName
    Select * From #tableName 
      

  11.   

    create table #t
    (
       姓名 varchar(10) ,
       语文 int
    )insert into #t(姓名 , 语文 ) values('张三',73)
    insert into #t(姓名 , 语文 ) values('李四',99)
    insert into #t(姓名 , 语文 ) values('王十',12)
    insert into #t(姓名 , 语文 ) values('李三',34)
    insert into #t(姓名 , 语文 ) values('赵六',56)
    insert into #t(姓名 , 语文 ) values('目一',15)
    insert into #t(姓名 , 语文 ) values('人人',100)
    insert into #t(姓名 , 语文 ) values('我产',78)
    select (select count(1) from #t where 语文>=T.语文) as 名次,
            T.*
    from #t T
    order by 语文 DESC