У меня есть таблица, которая содержит столбцы StructureNumber и SubStructureNumber.StructureNumbers нумеруются последовательно, начиная с 1 для каждого PropertyId.
Дочерние структуры могут существовать для структуры, в этом случае SubStructureNumber будет> 0, с тем же StructureNumber, что и у родительской структуры (верхнего уровня).
Структуры верхнего уровня имеют SubStructureNumber 0, в то время как SubStructures (дочерние структуры структуры верхнего уровня) нумеруются последовательно, начиная с 1.
Пример данных:
PropertyId | StructureNumber | SubStructureNumber
144 | 1 | 0
144 | 2 | 0
197 | 1 | 0
197 | 2 | 0
197 | 3 | 0
197 | 3 | 1
197 | 3 | 2
Проблема возникает, когда структура удаляется для свойства.Например, если StructureNumber 2 для PropertyId 197 удален, мне нужно изменить нумерацию структур для этого свойства, чтобы заполнить пропущенное число.
PropertyId | StructureNumber | SubStructureNumber
197 | 1 | 0
197 | 3 | 0
197 | 3 | 1
197 | 3 | 2
Аналогичным образом, если SubStructure удалена, мне нужно изменить нумерацию SubStructureNumbers.для каждого StructureNumber:
PropertyId | StructureNumber | SubStructureNumber
197 | 1 | 0
197 | 3 | 0
197 | 3 | 2
Я знаю, как выполнить перенумерацию StructureNumbers, используя CTE, как показано в в этом посте , используя что-то вроде этого:
DECLARE @PropertyId int = 197;
WITH Renumber AS
(
SELECT
StructureNumber,
ROW_NUMBER() OVER (ORDER BY os.StructureNumber DESC,
os.SubStructureNumber DESC) as StructureNumberNew
FROM dbo.parcel_OtherStructures os
WHERE os.PropertyId = @PropertyId
ORDER BY os.StructureNumber DESC, os.SubStructureNumber DESC
)
UPDATE Renumber SET StructureNumber = StructureNumberNew;
Я просто не знаю, как также изменить нумерацию SubStructureNumbers для каждого StructureNumber, не добавляя значение ROW_NUMBER () для StructureNumber для этих строк.
Я видел упоминание об использовании DENSE_RANK, но не знаю, как его использовать длявыполнить мою задачу.