С какой стати вы хотите хранить эти данные, когда вы всегда можете получить их во время запроса и гарантировать, что они будут точными?
SELECT
[type], data,
id = ROW_NUMBER() OVER (PARTITION BY [type] ORDER BY data)
FROM dbo.table
ORDER BY [type], id;
Способ, которым вы хотитесделайте это, вам понадобится триггер (или несколько), чтобы сохранить информацию в таблице при изменении данных.Например, что происходит при выполнении следующих запросов:
DELETE dbo.table WHERE data = 'B';
UPDATE dbo.table SET data = 'Z' WHERE data = 'C';
Не хранить избыточные данные.Вы думаете, что это что-то вас спасет, но все, что нужно сделать, - это потребовать дополнительное хранилище и создать ненужное горе для обслуживания.