Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ОТбор данных из одной в таблицы в другую с помощью цикла  [new]
Dreamu4aya
Member

Откуда: Саратов
Сообщений: 30
Ситуация такая: есть табличка вроде
коднаименованиеномервес
1корова1
2шкура20
3мясо75
4молоко5
5курица2
6перья1
7мясо3
8яйца1
9свинья3
10мясо45
11шкура5


нужно взять оттуда данные, чтобы получилось
номернаименованиечасть вес
1корова шкура 20
1 корова мясо 75
1 корова молоко 5
2 курица перья 1
2 курица мясо3
2 курица яйца1
3 свинья мясо45
3 свинья шкура5



Недавно работаю с sql, поэтому не знаю как реализовать цикл, чтобы идти в цикле наверх, пока в поле номер не появиться ненулевое значение. Тогда в новую таблицу добавить строку найденный номер,найденное наименование, текущее наимнование, текущий вес.

Заранее спасибо за помощь!
7 май 13, 16:28    [14268997]     Ответить | Цитировать Сообщить модератору
 Re: ОТбор данных из одной в таблицы в другую с помощью цикла  [new]
Glory
Member

Откуда:
Сообщений: 104751
И по какой логике "10 мясо 45" привязано именно к "9 свинья 3", а не к "1 корова 1" ?
7 май 13, 16:30    [14269016]     Ответить | Цитировать Сообщить модератору
 Re: ОТбор данных из одной в таблицы в другую с помощью цикла  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Glory
И по какой логике "10 мясо 45" привязано именно к "9 свинья 3", а не к "1 корова 1" ?

Предположу, что между 10-ым мясом и 9-ой свинье нет такой свиньи у которой есть номер и код которой больше 9.
7 май 13, 17:18    [14269410]     Ответить | Цитировать Сообщить модератору
 Re: ОТбор данных из одной в таблицы в другую с помощью цикла  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Мне больше интересно, что значит
автор
идти в цикле наверх
:)
7 май 13, 17:24    [14269443]     Ответить | Цитировать Сообщить модератору
 Re: ОТбор данных из одной в таблицы в другую с помощью цикла  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
declare @t table (id int, name varchar(10), n int, w int);

insert into @t 
values
(1, 'корова', 1, null),	
(2, 'шкура', null, 20),
(3, 'мясо', null, 75),
(4, 'молоко', null, 5),
(5, 'курица', 2, null),
(6, 'перья', null, 1),
(7, 'мясо', null, 3),
(8, 'яйца', null, 1),
(9, 'свинья', 3, null),
(10, 'мясо', null, 45),
(11, 'шкура', null, 5);

with x as
(
 select id, name, n from @t where n is not null 
)
select
 c.n, c.name, t.name, t.w
from
 @t t cross apply
 (select top (1) name, n from x where id < t.id order by id desc) c
where
 t.n is null;
7 май 13, 18:17    [14269743]     Ответить | Цитировать Сообщить модератору
 Re: ОТбор данных из одной в таблицы в другую с помощью цикла  [new]
Dreamu4aya
Member

Откуда: Саратов
Сообщений: 30
Glory
И по какой логике "10 мясо 45" привязано именно к "9 свинья 3", а не к "1 корова 1" ?


если от "10 мясо 45" идти наверх в таблице , ближайшая строчка, содержащая номер<>0 является строчка "9 свинья 3".
Тут как раз суть в том, чтобы из плохо организованной таблицы получить нормально организованную.
8 май 13, 09:40    [14271421]     Ответить | Цитировать Сообщить модератору
 Re: ОТбор данных из одной в таблицы в другую с помощью цикла  [new]
Dreamu4aya
Member

Откуда: Саратов
Сообщений: 30
ambarka_max
Мне больше интересно, что значит
автор
идти в цикле наверх
:)


наверх таблицы построчно
8 май 13, 09:41    [14271425]     Ответить | Цитировать Сообщить модератору
 Re: ОТбор данных из одной в таблицы в другую с помощью цикла  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dreamu4aya
идти наверх в таблице

Под этим вы подразумеваете, что значение в поле "код" определяет порядок записей ?
8 май 13, 09:53    [14271505]     Ответить | Цитировать Сообщить модератору
 Re: ОТбор данных из одной в таблицы в другую с помощью цикла  [new]
Dreamu4aya
Member

Откуда: Саратов
Сообщений: 30
Glory,

да, именно
8 май 13, 10:03    [14271586]     Ответить | Цитировать Сообщить модератору
 Re: ОТбор данных из одной в таблицы в другую с помощью цикла  [new]
EugeniaK
Member

Откуда:
Сообщений: 61
Dreamu4aya,
Просто выбираете для каждой части номер группы запросом вида
select min(tabl2.nomer) as nomer,
tabl.naim as chast,
tabl.ves
from tabl
join (select nomer from tabl where nomer > 0) as tabl2
where tabl.nomer <> 0
and tabl.kod >= tabl2.kod
group by tabl.chast,ves
Потом апдейтом по номеру прописываем при необходимости название группы.
10 май 13, 18:34    [14279700]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить