Таблица содержит PID и соответствующие значения. PID с одинаковыми значениями должен быть присвоен одинаковый идентификатор группы. A, B, D напрямую связаны (значение = ABC), и, поскольку C связан с D (значение = GHI), A, B, C & D являются частью одной группы.
PID Value
--------------
A101 ABC
A101 XYZ
B101 ABC
C101 GHI
C101 DEF
D101 ABC
D101 GHI
E101 KLM
F101 MNO
Ожидаемый результат:
PID GroupID
--------------
A101 1
B101 1
C101 1
D101 1
E101 2
F101 3
Я пробовал ниже запрос без успеха:
with cte as (
select PID, Value, Rank() OVER(ORDER BY Value) rn
from t
union all
select t.PID, cte.Value, cte.rn
from t join cte
on t.Value = cte.Value and
t.PID < cte.PID
)
select *
from cte
Есть ли способ исправить запрос, а также написать более эффективный запрос (около 1 миллиона строк) в SQL Server 2012/2014?