SQL Server Группирование несвязанных записей по значению строки

Как сгруппировать повторяющиеся записи?

У меня есть единственный столбец, который обозначает, является ли запись началом, концом или детальной записью. Подробные записи - это записи, которые существуют после начальной записи и перед конечной записью.

Я хочу сгруппировать эти записи вместе с уникальным идентификатором, чтобы каждый раз, когда есть конечная запись, следующая серия записей получала новый идентификатор группы.

Я пробовал серию самостоятельных соединений, подзапросов и cte Не создавая настраиваемой функции, представления или CTE, я надеюсь создать это в одном запросе выбора.

Любые советы или указатели очень ценятся.

Пример перед решением:

--------------------------------------------------
| ID      | RecordType    |  SomeValue
--------------------------------------------------
|001      | Start record  |  some header info
|002      | Detail Record |  value
|003      | Detail Record |  value
|004      | Detail Record |  value
|005      | End Record    |  some other header info
|006      | Start Record  |  some header info
|007      | Detail Record |  Value
|008      | End  Record   |  some other header info

Чего я пытаюсь достичь:

------------------------------------------------------------------
| ID      | RecordType    |  SomeValue             | RecordGroup
------------------------------------------------------------------
|001      | Start record  |  some header info      | 001
|002      | Detail Record |  value                 | 001
|003      | Detail Record |  value                 | 001
|004      | Detail Record |  value                 | 001
|005      | End Record    |  some other header info| 001
|006      | Start Record  |  some header info      | 002
|007      | Detail Record |  Value                 | 002
|008      | End  Record   |  some other header info| 002

Остров Google SQL и проблема с пробелами?

xQbert 17.12.2018 15:44
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать функцию LAG и запустить SUM. Ниже предполагается, что секционирование отсутствует, а строки упорядочены по идентификатору:

SELECT ID, RecordType, SomeValue,
       SUM(chg) OVER (ORDER BY ID) AS grp
FROM (
    SELECT ID, RecordType, SomeValue,
           CASE WHEN LAG(RecordType) OVER (ORDER BY ID) IN ('Start record', 'Detail Record') THEN 0 ELSE 1 END AS chg
    FROM t
) cte1

Демо на DB Fiddle

Большое спасибо за вашу помощь, добавлю это в мою библиотеку сценариев.

Flat_Cap_Hat 17.12.2018 15:45

@Flat_Cap_Hat вот как ты говоришь спасибо ... если помогло конечно.

Salman A 17.12.2018 15:48

Другие вопросы по теме