Задача: определить, есть ли в выборке несколько идущих подряд строк с определенными значениями, например три строки подряд (если просто три, то задача легко решается) с ненулевым значением числового поля. Задача очень простая в алгоритмических языках, но несколько не очевидная в декларативном языке SQL. В принципе перебирать строки в выборке можно с помощью курсора, но это крайне медленное и громоздкое решение. Есть более быстрый и простой, но крайне неочевидный путь выполнить последовательную обработку каждой строки прямо внутри select - собирать значения в строку.
select @sum_string = @sum_string + case when INT_FIELD = 0 then '0' else '1' end + ',' from SOME_TABLE -- если INT_FIELD будет примерно таким 6000, 6, 0, 2100, 11000, 1, 0 то мы получим строку вида 1,1, 0, 1, 1, 1, 0 -- которую можно проанализировать банальной строковой функцией -- само собой можно использовать этот метод для склейки всех значений колонки выборки в одну строку declare @has_triple_not_zero int set @has_triple_not_zero = 0; if @sum_string like '%1,1,1%' begin set @has_triple_not_zero = 1 end