2016-02-15 4 views
0

Я хочу вставить запись в другую таблицу (ten_split), пока значение не превысит значение в поле End_loc из start_table. Идея состоит в том, чтобы разбить записи в start_table на сегменты 10 м.Запись вставки T-SQL во время цикла

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

Предполагая, что я понять ваш вопрос правильно, так как вы используете сервер SQL, вы можете использовать рекурсивное ОТВ:

SQL Fiddle

сервера Настройка MS SQL 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 | 
+0

Легенда! Это сработало отлично! Спасибо, Стив! – Benjie98

+0

@ Benjie98 Я только редактировал сообщение для переформатирования, вы должны принять ответ в качестве принятого ответа, так что sgeddes получает кредит –

Смежные вопросы