用的是sql2000
现在有张表为  table1 其中有A/B/C/D 4列,B列和A列是关联的。例子如下:   A       B     C      D
  05     1001   JJ     qq
  08     1006   ww     ff
  09     1004   zz     bb
  03     1007   hh     oo
  01     1002   pp     ff
  07     1009   mm     yy现在想以B列排序,排序结果如下
   A         B     C      D
  01(05)   1001   JJ     qq
  02(01)   1002   pp     ff
  03(09)   1004   zz     bb
  04(08)   1006   ww     ff
  05(03)   1007   hh     oo
  06(070   1009   mm     yyA列的编号为排列后的编号。括号内的编号是之前本身编号。由于B列排序了,所以A列也跟着排序了,现在就想让A列重新编写序号,按照B列的顺序重新从01开始排列。
在查询分析器里应该怎么样做啊,高手出来帮帮忙,小弟感激不尽。

解决方案 »

  1.   

    用的是sql2000 
    现在有张表为  table1 其中有A/B/C/D 4列,B列和A列是关联的。例子如下:
    ----------------------------------------------------------
    用临时表:加递增字段!
      

  2.   

    ----------------------------------------------------------------
    -- Author  :fredrickhu(我是小F,向高手学习)
    -- Date    :2009-11-11 15:14:05
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([A] varchar(2),[B] int,[C] varchar(2),[D] varchar(2))
    insert [tb]
    select '05',1001,'JJ','qq' union all
    select '08',1006,'ww','ff' union all
    select '09',1004,'zz','bb' union all
    select '03',1007,'hh','oo' union all
    select '01',1002,'pp','ff' union all
    select '07',1009,'mm','yy'
    --------------开始查询--------------------------
    select 
    a='0'+cast(row_number() over(order by b) as varchar)+'('+a+')',
    b,c,d 
    from [tb]
    ----------------结果----------------------------
    /* 
    (6 行受影响)
    a                                   b           c    d
    ----------------------------------- ----------- ---- ----
    01(05)                              1001        JJ   qq
    02(01)                              1002        pp   ff
    03(09)                              1004        zz   bb
    04(08)                              1006        ww   ff
    05(03)                              1007        hh   oo
    06(07)                              1009        mm   yy(6 行受影响)
    */
      

  3.   

    --- 2005的话:可以用ROW_NUMBER函数
      

  4.   

    ---测试数据---
    if object_id('[tb]') is not null drop table [tb]
    go
    create table [tb]([A] varchar(2),[B] int,[C] varchar(2),[D] varchar(2))
    insert [tb]
    select '05',1001,'JJ','qq' union all
    select '08',1006,'ww','ff' union all
    select '09',1004,'zz','bb' union all
    select '03',1007,'hh','oo' union all
    select '01',1002,'pp','ff' union all
    select '07',1009,'mm','yy'
     
    ---查询---
    select
      A=right('00'+ltrim((select count(1)+1 from tb where b<t.b)),2),
      B,
      C,
      D
    from
      tb t
    order by
      B
    ---结果---
    A    B           C    D    
    ---- ----------- ---- ---- 
    01   1001        JJ   qq
    02   1002        pp   ff
    03   1004        zz   bb
    04   1006        ww   ff
    05   1007        hh   oo
    06   1009        mm   yy(所影响的行数为 6 行)
      

  5.   

    ---2000
    ----------------------------------------------------------------
    -- Author  :fredrickhu(我是小F,向高手学习)
    -- Date    :2009-11-11 15:14:05
    -- Version:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([A] varchar(2),[B] int,[C] varchar(2),[D] varchar(2))
    insert [tb]
    select '05',1001,'JJ','qq' union all
    select '08',1006,'ww','ff' union all
    select '09',1004,'zz','bb' union all
    select '03',1007,'hh','oo' union all
    select '01',1002,'pp','ff' union all
    select '07',1009,'mm','yy'
    --------------开始查询--------------------------
    select id=identity(int),* into #t from tb order by b
    select 
      a='0'+cast(id as varchar)+'('+a+')',b,c,d 
    from 
      #t
    ----------------结果----------------------------
    /* 
    (6 行受影响)
    a                                   b           c    d
    ----------------------------------- ----------- ---- ----
    01(05)                              1001        JJ   qq
    02(01)                              1002        pp   ff
    03(09)                              1004        zz   bb
    04(08)                              1006        ww   ff
    05(03)                              1007        hh   oo
    06(07)                              1009        mm   yy(6 行受影响)
    */
      

  6.   

    新建个table2,比table1多个自增列,把table2的b列设置为聚集索引
    然后把数据导入table2
      

  7.   

    我好像说的不是很清楚,应该是7楼那样的结果。可是我不明白函数是什么意思应该怎么改。
    例子如下:
      A                 B                   C        D
    0050 205060002 2 02
    0580 302000013 2 03
    0830 102060003 2 0102
    0840 301000063 2 03
    0850 301000026 2 03
    0860 102070014 1 0102
    根据B列排序,如2楼所说A列的值可以改变:但必须是0010,0020……0110,0120……1110,1120这样的。
    结果如下。
      A                 B                   C        D
    0010 102060003 2 0102
    0020 102070014 1 0102
    0030 205060002 2 02
    0040 301000026 2 03
    0050 301000063 2 03
    0060 302000013 2 03请问高手在查询分析器里应该怎样写