Простой вопрос: как взять набор записей с PK и создать ровно две записи для каждого источника со слегка измененным ключом для дубликата?Другими словами, я беру 4000 записей и создаю 8000 записей, где 4000 идентичны, а остальные 4000 имеют слегка измененный ключ.Я не могу сделать объединение, потому что по сути это два выбора (длинная история).
Остальное усложняется, но, возможно, необходимо привести примеры.
Это мой оригинальный набор (он содержит более 4000записи)
dateGroup areaGroup itemID editionID
1 1 1 1
1 1 1 2
1 2 1 1
1 2 2 1
2 1 1 1
2 1 1 2
2 2 1 1
2 2 1 2
Для каждой записи мне нужно создать повторяющуюся запись, объединяющую areaGroups вместе под '0', затем создать разделенный запятыми список оригинальных areaGroups как отдельное поле.(«Почему» - какой-то тупой программист (я) допустил ошибку около 15 лет назад.) Я могу изменить нумерацию editionID по мере необходимости, но исходная и дублирующаяся запись должны иметь одинаковый editionID (таким образом, объединение не будет работать),PK остается таким же, как указано выше (все поля)
dateGroup areaGroup itemID editionID aGroups
1 0 1 1 1
1 0 1 2 1
1 0 1 1 2 // Duplicate (EditionID)
1 0 2 1 2
2 0 1 1 1
2 0 1 2 1
2 0 1 1 2 // Duplicate (EditionID)
2 0 1 2 2
Конечный результат будет изменять нумерацию editionID по мере необходимости, чтобы сделать запись уникальной.
dateGroup areaGroup itemID editionID aGroups (EditionID is what is altered)
1 0 1 1 1
1 0 1 2 1
1 0 1 2 2 1 changed to 2 (one more than row 1)
1 0 2 1 2
2 0 1 1 1
2 0 1 2 1
2 0 1 2 2 1 changed to 2 (one more than row 1)
2 0 1 2 2
1 1 1 1
1 1 1 2
1 2 1 2 1 changed to 2 (editionID) to match
1 2 2 1
2 1 1 1
2 1 1 2
2 2 1 2 1 changed to 2 to match above
2 2 1 2
Я знаю, что вы могли бы вычислитьeditionID вроде ранга строки примерно так:
select row_number() over (
partition by dateGroup, itemID
order by dateGroup, itemID) as editionID
Так что все, что мне нужно, это знать, как дублировать записи из одного набора