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

Откуда:
Сообщений: 6
Рекурсивно выбираю данные из таблицы.
Необходимо на каждом новом уровне рекурсии производить преобразования над значением предыдущего уровня
Т.е. sname[j] = sname[j-1] + '!'

with cte (Name, sname, lev)
as
(
Select t3.name, cast (t3.name as varchar(15)) as sname , 0 as lev
from test3 t3
union all
Select t3.name, cast(( rtrim(c.sname)) +'!' as varchar(15) ), lev+1
from test3 t3 inner join cte c on c.name<>t3.name or c.name=t3.name

)
Select *
from cte
where lev<=3

То что получается и то что хочется получить - во вложении.
Подскажите пожалуйста, как подправить ошибку.

К сообщению приложен файл. Размер - 59Kb
5 июн 11, 11:56    [10764553]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с рекурсией.  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Rstud, необходимы: таблица+тестовые данные, потом можно будет поглядеть.
5 июн 11, 12:40    [10764633]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с рекурсией.  [new]
Rstud
Member

Откуда:
Сообщений: 6
Tаблица "test3", один атрибут "name".
В три заначения:
Иванов
Петров
Смирнов
5 июн 11, 14:10    [10764792]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с рекурсией.  [new]
Pasionario
Member

Откуда:
Сообщений: 213
declare @t table([name] nvarchar(15));

insert @t values('Иванов'), ('Петров'), ('Смирнов');

with cte (n1, n2, l)
as
(
	select [name] n1, [name] n2, 0 l
	from @t
	
	union all
	
	select n1, cast(n2 + '!' as nvarchar(15)), l + 1
	from cte c
	where l < 2
)

select *
from cte
order by l, n1

n1 n2 l
Иванов Иванов 0
Петров Петров 0
Смирнов Смирнов 0
Иванов Иванов! 1
Петров Петров! 1
Смирнов Смирнов! 1
Иванов Иванов!! 2
Петров Петров!! 2
Смирнов Смирнов!! 2
5 июн 11, 14:54    [10764908]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с рекурсией.  [new]
Rstud
Member

Откуда:
Сообщений: 6
Pasionario, cпасибо, ошибку у себя нашел.
5 июн 11, 15:49    [10765049]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить