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 |
|