У меня есть некоторые данные о продуктах, которые с трудом работают. Продукты могут быть проданы с 1, 2 или 3 частями, а способ, которым была разработана система, части 2 и 3 для заказанного продукта были просто следующими рядами после первой строки для этого продукта.Разделение связанных строк на группы
Вот некоторые выборочные данные ....
----------------------------------------------------------
OrderId Sku Type Row_Id OtherColumns...
----------------------------------------------------------
123 001 Double 0 Other stuff..
123 001 Double 1 Other stuff..
123 001 Double 2 Other stuff..
123 001 Double 3 Other stuff..
123 002 Single 4 Other stuff..
123 003 Triple 5 Other stuff..
123 003 Triple 6 Other stuff..
123 003 Triple 7 Other stuff..
123 001 Double 8 Other stuff..
123 001 Double 9 Other stuff..
123 002 Single 10 Other stuff..
123 002 Single 11 Other stuff..
123 002 Single 12 Other stuff..
123 002 Single 13 Other stuff..
Старое программное обеспечение (VB) имеет дело с этим перебором строк и смотрит вперед, как это петли, получать необходимую информацию из строк, а затем пропускает их.
Быстрая перемотка вперед 8 лет ... Я унаследовал эту систему в своей новой работе и переписал систему с нуля. Проблема, с которой я сталкиваюсь, заключается в том, чтобы получить эти устаревшие данные в мой новый формат.
Я ищу способ выбрать одни и те же данные и разбить его на соответствующие номера сегментов. Я использовал RANK() OVER (PARTITION BY) без успеха. Я думаю, что я просто не делаю это правильно.
В идеале я хотел бы иметь возможность генерировать результирующий набор, который выглядит следующим образом: (Примечание столбец сегмента)
-------------------------------------------------------------------
OrderId Sku Type Row_Id Segment OtherColumns...
-------------------------------------------------------------------
123 001 Double 0 1 Other stuff..
123 001 Double 1 2 Other stuff..
123 001 Double 2 1 Other stuff..
123 001 Double 3 2 Other stuff..
123 002 Single 4 1 Other stuff..
123 003 Triple 5 1 Other stuff..
123 003 Triple 6 2 Other stuff..
123 003 Triple 7 3 Other stuff..
123 001 Double 8 1 Other stuff..
123 001 Double 9 2 Other stuff..
123 002 Single 10 1 Other stuff..
123 002 Single 11 1 Other stuff..
123 002 Single 12 1 Other stuff..
123 002 Single 13 1 Other stuff..
В идеале я хотел бы избежать курсоры или петли. Я буду использовать запрос для переноса миллионов записей, полученных из нескольких таблиц.
Заранее за вашу помощь.
EDIT Я обновил образцы данных, чтобы показать, что у меня действительно есть обратные группы, которые мне нужно изолировать.
Идентификатор для группы «» является только 'type' колонка, где а«двойной»значение означает два ряда сгруппированных, &«тройной»означает три? И - не следует ли создавать идентификатор, который отличается от группы, а не «сегмент», который, похоже, не группирует строки вообще? –
Вторая таблица примеров - это не мой новый формат ... это просто набор результатов, позволяющий легко идентифицировать сегменты для процесса импорта данных. – ctorx
Хорошо. И первая часть моего вопроса? –