我想将记录插入另一个表(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。我是新手使用循环,并希望得到任何帮助。
答案 0 :(得分:1)
假设我正确理解您的问题,因为您正在使用sql server,您可以使用递归cte:
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 |