日期:2014-05-17  浏览次数:20473 次

请教一个sql依据怎么写 ?
 一个表有3000条记录,怎么按照顺序分组插入到另一个表中, 每组1000条,组号01,02,03 ,这个语句应该怎么写呢,使用循环吗?

------解决方案--------------------
不用循环,试试:

drop table tb

create table tb(ID int,aaa varchar(10))


insert into tb
select 1,'aa' 
go 1000


insert into tb
select 1,'bb' 
go 1000


insert into tb
select 1,'cc' 
go 1000



select *,
       right('00'+cast((ROW_NUMBER() over(order by @@servername)-1)/1000+1 as varchar),2) as group_num
from tb

------解决方案--------------------

WITH a1 AS
(
SELECT *,ROW_NUMBER() OVER (ORDER BY @@servername) re 
FROM 表
)
SELECT *,re-CASE re%1000 WHEN 0 THEN re%1000+1000 else re%1000 end 组号
FROM a1

------解决方案--------------------

-- 建测试表
create table 一个表(id int)

create table 另一个表(组号 varchar(5),id int)

-- 产生3000笔记录
set nocount on
declare @i int
select @i=1
while(@i<=3000)
begin
 insert into 一个表(id) values(@i)
 select @i=@i+1
end
set nocount off


-- 按照顺序分组插入到另一个表中, 每组1000条,组号01,02,03 
insert into 另一个表(组号,id)
 select '0'+rtrim(((row_number() over(order by getdate())-1)/1000)+1),id 
 from 一个表

-- 结果
select 组号,
       min(id) 'min_id',
       max(id) 'max_id'
 from 另一个表 
 group by 组号
 order by 组号

/*
组号    min_id      max_id
----- ----------- -----------
01    1           1000
02    1001        2000
03    2001        3000

(3 row(s) affected)
*/