Я пытаюсь обновить свои навыки с помощью SQL-запросов, которые я не использовал много лет.
При выполнении некоторых упражнений я столкнулся с проблемой, которую довольно просто решить в MySql, но сложнее вSQL Server. Я хотел бы знать, если есть более простой способ сделать это.
Я упрощу проблему ради вопроса (чтобы избежать сложного кода)
Итак, у меня естьпоследовательность чисел. В этой последовательности я хочу идентифицировать и нумеровать подпоследовательности чисел <10. Когда встречается число> = 10, начинается новая подпоследовательность, идентифицируемая счетчиком seqno. Ниже запрос mysql + результат 100
create table myt1(mynum int);
insert into myt1 values (13), (5), (8), (15), (2), (5), (18), (3), (6), (9), (8), (12);
set @seqno = 0;
select mynum, @seqno := case when mynum < 10 then @seqno else @seqno+1 end as seqno
from myt1
Теперь с SQL-сервером все усложняется, поскольку его нельзя выполнять в одном и том же операторе SELECTкак поиск данных, так и присвоение переменных. Мой обходной путь для получения того же результата состоял в том, чтобы скопировать таблицу во временную таблицу с дополнительным столбцом, а затем обновить таблицу / столбец с помощью следующего кода:
create table myt1(mynum int);
insert into myt1 values (13), (5), (8), (15), (2), (5), (18), (3), (6), (9), (8), (12);
select *, 1 as seqno
into #tempt1
from myt1
declare @seqno int;
set @seqno = 0;
update #tempt1
set
seqno = @seqno,
@seqno = case when mynum < 10 then @seqno else @seqno+1 end
select * from #tempt1
Может кто-нибудь сказать мне, если есть более простойспособ написать этот запрос в MSSQL и почему есть ограничение, которое не найдено в MySQL?
Спасибо!