Требование сложно понять, поэтому я буду основывать свой ответ на этом:
Учитывая набор данных, показанный ниже, мне нужно иметь возможность получить значение в optionGroupNumber дляверно, на основе значений в столбцах optionType & optionValue.
Допустим, у нас была таблица с животными и цветами, и мы хотели создать номер группы на основе животных того же типа и цвета.Мы бы сделали это с помощью RANK () следующим образом:
-- sample data
DECLARE @sometable TABLE (someId int identity, pet varchar(20), color varchar(20));
INSERT @sometable (pet, color)
VALUES ('cat','blue'),('pig','green'),('cat','yellow'),('pig','green'),('cat','yellow'),
('cat','blue'),('dog','black'),('dog','white'),('pig','green'),('dog','black');
-- group by pet and color
SELECT *, OptionGroupNumber = DENSE_RANK() OVER (ORDER BY pet, color)
FROM @sometable;
Результат:
someId pet color OptionGroupNumber
----------- -------------------- -------------------- --------------------
1 cat blue 1
6 cat blue 1
3 cat yellow 2
5 cat yellow 2
10 dog black 3
7 dog black 3
8 dog white 4
9 pig green 5
4 pig green 5
2 pig green 5
Обратите внимание, как работает группировка:

Чтобы обновить существующий столбец, вы должны взять эту логику и применить ее к выражению UPDATE, например:
-- sample data
DECLARE @sometable TABLE
(someId int identity, pet varchar(20), color varchar(20), OptionGroupNumber int);
INSERT @sometable (pet, color)
VALUES ('cat','blue'),('pig','green'),('cat','yellow'),('pig','green'),('cat','yellow'),
('cat','blue'),('dog','black'),('dog','white'),('pig','green'),('dog','black');
WITH generateOptionGroupNumber AS
(
SELECT *, newOptionGroupNumber = DENSE_RANK() OVER (ORDER BY pet, color)
FROM @sometable
)
UPDATE generateOptionGroupNumber
SET OptionGroupNumber = newOptionGroupNumber
SELECT *
FROM @sometable
ORDER BY OptionGroupNumber;