+---+------------+
| V | output |
+---+------------+
| y | 1 |
| y | 2 |
| y | 3 |
| N | 0 |
| y | 1 |
| y | 2 |
| N | 0 |
| N | 1 |
+---+------------+
ответ
Ваш выход образец как некоторые немного сложным,
я предпочел использовать SQL recursive query для решения вашей проблемы Конечно я полагаю, что колонка идентификатор, начиная с 1 и идет непрерывно без зазора , В более сложном случае, функция row_number() должна быть прибавлено идентификатор поля и присоединиться должны быть установлены на rownumbers
Я надеюсь, что это помогает,
--create table bool(id int identity(1,1), bool char(1))
--insert into bool values ('Y'),('N'),('Y'),('Y'),('Y'),('N'),('Y'),('N'),('N'),('Y'),('Y'),('Y'),('Y'),('Y'),('N'),('Y'),('Y')
;with cte as (
select id, bool curr, bool pre, 1 output from bool where id = 1
union all
select
bool.id, bool.bool curr, cte.curr,
case when bool.bool = cte.curr then cte.output + 1 else case when bool.bool = 'Y' then 1 else 0 end end
from cte
inner join bool on bool.id = cte.id + 1
)
select * from cte
Выход следующим
Позвольте мне предположить, что у вас есть столбец (скажем, id
), который имеет информацию для заказа. Затем вы хотите идентифицировать группы «Y» и «N», которые появляются вместе, а затем перечисляют их.
Вы можете сделать это, используя разницу чисел строки трюк:
select t.v,
row_number() over (partition by v, seqnum_id - seqnum_vid order by id) as output
from (select t.*,
row_number() over (order by id) as seqnum_id,
row_number() over (partition v by order by id) as seqnum_vid
from t
) t;
Объясняя, как это работает, как правило, сложнее. Я рекомендую запустить подзапрос, чтобы посмотреть, как выглядят порядковые номера и почему разница для групп, которые вы хотите идентифицировать, является постоянной.
- 1. как сгенерировать следующую последовательность?
- 2. Как сгенерировать последовательность таблиц умножения?
- 3. Как сгенерировать эту последовательность программно
- 4. Как сгенерировать последовательность в postgresql
- 5. vi - как сгенерировать последовательность чисел?
- 6. Случайное семя C# - Как сгенерировать такую же последовательность чисел для отладки
- 7. Как сгенерировать последовательность чисел в Голанге?
- 8. Как сгенерировать последовательность в MySQL 5.1community edition
- 9. как сгенерировать последовательность на основе значения столбца
- 10. Как сгенерировать случайную последовательность чисел в python?
- 11. matlab: заданная строка префикса, как сгенерировать последовательность
- 12. Как сгенерировать последовательность чисел, соответствующих шаблону?
- 13. Как сгенерировать последовательность, которая увеличивается поочередно
- 14. Как сгенерировать повторяемую последовательность случайных чисел?
- 15. Как сгенерировать последовательность чисел/символов в javascript?
- 16. Как сгенерировать эту последовательность с помощью python
- 17. Как сгенерировать альфа-последовательность в C#?
- 18. Как сгенерировать последовательность строк в C++
- 19. Как сгенерировать последовательность чисел базы 3
- 20. Как создать последовательность чисел, такую как «минуты: секунды»
- 21. Сгенерировать последовательность в цикле
- 22. Сгенерировать последовательность с помощью рекурсии
- 23. Уменьшите ленивую последовательность, такую как петля с условием в Clojure
- 24. MATLAB: Сгенерировать последовательность случайных чисел
- 25. R Как сгенерировать инкрементную последовательность на основе временной сегментированной последовательности
- 26. Как я могу сгенерировать последовательность чисел в Elixir?
- 27. Как я могу сгенерировать рядовую последовательность Роуленда идиоматически в J?
- 28. Как сгенерировать функцию, которая будет алгебраически кодировать последовательность?
- 29. Как сгенерировать последовательность на основе двух столбцов в R?
- 30. Как сгенерировать диапазон (последовательность) значений из заданных двух входных значений
Вы не можете. Таблицы SQL представляют собой * неупорядоченные * наборы. Итак, вам нужен столбец, который задает порядок, чтобы получить желаемый результат. –