循环

时间:2016-02-15 02:28:42

标签: sql-server tsql loops while-loop record

我想将记录插入另一个表(ten_split),直到该值超过start_table的End_loc字段中的值。我们的想法是将start_table中的记录拆分为10m段。

start_table如下所示:

ID   Start_loc   End_loc
 1    0           40
 2    0           35

我希望ten_split表基于start_table显示如下:

UID  ID  start_new  end_new
 1    1   0          10
 2    1   10         20
 3    1   20         30
 4    1   30         40
 5    2   0          10
 6    2   10         20
 7    2   20         30
 8    2   30         40

我正在使用Microsoft T-SQL。我是新手使用循​​环,并希望得到任何帮助。

1 个答案:

答案 0 :(得分:1)

假设我正确理解您的问题,因为您正在使用sql server,您可以使用递归cte:

SQL Fiddle

MS SQL Server 2008架构设置

create table start_table (id int, start_loc int, end_loc int);

insert into start_table values (1, 0, 40);
insert into start_table values (2, 0, 35);

查询1

with recursivecte as (
  select id, 0 as start_loc, 10 as end_loc
  from start_table
  union all 
  select s.id, r.start_loc+10, r.end_loc+10
  from start_table s
    join recursivecte r on s.id = r.id
  where r.end_loc < s.end_loc
  )
select * from recursivecte
order by id, start_loc

<强> Results

| id | start_loc | end_loc |
|----|-----------|---------|
|  1 |         0 |      10 |
|  1 |        10 |      20 |
|  1 |        20 |      30 |
|  1 |        30 |      40 |
|  2 |         0 |      10 |
|  2 |        10 |      20 |
|  2 |        20 |      30 |
|  2 |        30 |      40 |