用的是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开始排列。
在查询分析器里应该怎么样做啊,高手出来帮帮忙,小弟感激不尽。
现在有张表为 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开始排列。
在查询分析器里应该怎么样做啊,高手出来帮帮忙,小弟感激不尽。
现在有张表为 table1 其中有A/B/C/D 4列,B列和A列是关联的。例子如下:
----------------------------------------------------------
用临时表:加递增字段!
-- 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 行受影响)
*/
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 行)
----------------------------------------------------------------
-- 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 行受影响)
*/
然后把数据导入table2
例子如下:
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请问高手在查询分析器里应该怎样写