У вас действительно высокая репутация, так что это не просто вопрос «меня спросили на собеседовании».
Существует несколько подходов. Я думаю, что тот, который я возьму, будет union all
. Признайте, что каждая другая строка из таблицы. Остальные - от присоединения одной строки к другой. Итак, что предлагает:
select firstname, lastname
from likethis t
union all
select t.lastname, lead(t.firstname) over (order by id)
from likethis t
Увы, это дает вам шесть строк вместо пяти, так что последний должен быть отфильтрован:
select firstname, lastname
from (select firstname, lastname
from likethis t
union all
select t.lastname, lead(t.firstname) over (order by id)
from likethis t
) t
where lastname is not null
order by firstname;
Примечание: Я не могу определить, есть ли критерии сортировки в алфавитном порядке или по id; эти решения предполагают, что они являются алфавитными.
Второе примечание: я предполагаю, что это не решение, которое они имеют в виду. Вероятно, они ищут себя. Но зачем беспокоиться, когда lead()
делает работу за вас.
* «руководство» не является признанным встроенным функционалом Название: * --http: //sqlfiddle.com/#! 3/b1ac3/1 –
Он запускается в SQL Server 2012. Вопрос не должен касаться программного обеспечения, которое является двумя основными версиями устаревшего. –
SqlFiddle отказывается запускать SQL Server 2012 на данный момент. –