这个不大好表达,举个例子:
表tA:
id(自增主键) 考试时间 姓名 数学 语文 英语
1 2010-1-1 a 80 90 90
2 2009-8-1 b 70 80 90
3 2009-12-1 b 80 80 70
4 2010-7-1 c 80 60 100我想把这个表里的数据按照[考试时间]的倒序,依次插入到一个临时表中,形成一个这样的:
sn id 考试时间 姓名 数学 语文 英语
1 4 2010-7-1 c 80 60 100
2 1 2010-1-1 a 80 90 90
3 3 2009-12-1 b 80 80 70
4 2 2009-8-1 b 70 80 90
主要是因为想实现存储过程翻页,按照时间倒序排列,所以用了下临时表。
我用了下面的语句:
select identity(int,1,1) sn, id, 考试时间, 姓名, 数学, 语文, 英语
from tA
order by 考试时间 desc但是sql执行的插入是随机性的,并不是按照order by 的顺序插入的,只是插入后按照order by又排了顺序,可sn是乱的。请高手们指教!
表tA:
id(自增主键) 考试时间 姓名 数学 语文 英语
1 2010-1-1 a 80 90 90
2 2009-8-1 b 70 80 90
3 2009-12-1 b 80 80 70
4 2010-7-1 c 80 60 100我想把这个表里的数据按照[考试时间]的倒序,依次插入到一个临时表中,形成一个这样的:
sn id 考试时间 姓名 数学 语文 英语
1 4 2010-7-1 c 80 60 100
2 1 2010-1-1 a 80 90 90
3 3 2009-12-1 b 80 80 70
4 2 2009-8-1 b 70 80 90
主要是因为想实现存储过程翻页,按照时间倒序排列,所以用了下临时表。
我用了下面的语句:
select identity(int,1,1) sn, id, 考试时间, 姓名, 数学, 语文, 英语
from tA
order by 考试时间 desc但是sql执行的插入是随机性的,并不是按照order by 的顺序插入的,只是插入后按照order by又排了顺序,可sn是乱的。请高手们指教!
into #临时表
from tA
order by 考试时间 desc这样SN不会是乱的吧?
(
sn identity (int,1,1),
id int,
.........
)
insert into #t(id,......)
select id,....... from ta order by XXX desc
select * from #t
-- Author : htl258(Tony)
-- Date : 2010-04-01 08:54:42
-- Version:Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)
-- Mar 29 2009 10:27:29
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
--------------------------------------------------------------------------
--> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([id] INT primary key,[考试时间] DATETIME,[姓名] NVARCHAR(10),[数学] INT,[语文] INT,[英语] INT)
INSERT [tb]
SELECT 1,N'2010-1-1','a',80,90,90 UNION ALL
SELECT 2,N'2009-8-1','b',70,80,90 UNION ALL
SELECT 3,N'2009-12-1','b',80,80,70 UNION ALL
SELECT 4,N'2010-7-1','c',80,60,100
GO
--SELECT * FROM [tb]-->SQL查询如下:select sn=IDENTITY(INT),* into # from tb order by 考试时间 descselect * from #
/*
sn id 考试时间 姓名 数学 语文 英语
----------- ----------- ----------------------- ---------- ----------- ----------- -----------
1 4 2010-07-01 00:00:00.000 c 80 60 100
2 1 2010-01-01 00:00:00.000 a 80 90 90
3 3 2009-12-01 00:00:00.000 b 80 80 70
4 2 2009-08-01 00:00:00.000 b 70 80 90(4 行受影响)
*/这样不对吗
select into order by 不能确定插入顺序(微软文档没说明)
最好是插入后查询的时候排序
http://blog.csdn.net/misterliwei/archive/2010/01/05/5134043.aspx
---top 10000000 只要比你所有的记录条数大就可以了][/code]
select identity(int,1,1) as 'sn',a.* into #t from ( select top 10000000 * from ta order by 考试时间 desc) a
---top 10000000 只要比你所有的记录条数大就可以了
1、创建临时表(有自增主键);
2、Insert into(主要数据列..) 临时表 Select 主要数据列.. From 实际表 Order by 排序列。结贴散分!多谢!