Я ищу непрерывный алгоритм в tsql. Мои данные настроены, как показано ниже.Смежный заказ tsql
IF OBJECT_ID('Tempdb..#Area_Version') IS NOT NULL
DROP TABLE #Area_Version
CREATE TABLE #Area_Version
(
AreaVersionId INT ,
AreaId VARCHAR(1) ,
VersionId VARCHAR(2) ,
PocketGroupId INT
)
INSERT INTO #Area_Version
(AreaVersionId, AreaId, VersionId, PocketGroupId)
VALUES (1, 'A', 'V5', 0),
(2, 'B', 'V2', 0),
(3, 'C', 'V2', 0),
(4, 'D', 'V3', 0),
(5, 'E', 'V2', 0),
(6, 'F', 'V1', 0),
(7, 'F', 'V4', 0),
(8, 'G', 'V3', 0);
Результаты:
AreaVersionId AreaId VersionId PocketGroupId
------------- ------ --------- -------------
1 A V5 0
2 B V2 0
3 C V2 0
4 D V3 0
5 E V2 0
6 F V1 0
7 F V4 0
8 G V3 0
(8 row(s) affected)
Ниже визуальное представление данных.
AreaId V1 V2 V3 V4 V5
A x
B x
C x
D x
E x
F x x
G x
Заказ по регионуId, я ищу смежные группы. Поскольку V2 находится через области B, C и E, V2 и V3 в D, они не могут находиться в одном непрерывном порядке. В приведенном выше наборе данных могут быть две группы. (V5, V2, V1 и V3, V4) или (V5, V3, V4 и V2, V1). Я могу решить, какой набор имеет приоритет, исходя из столбца количества, который выходит за рамки вопроса.
Основываясь на результирующем наборе алгоритма, я обновлю PocketGroupId, чтобы я мог запросить на основе PocketGroupId, и я буду знать, что это смежная группа.
Желаемый результат должен быть примерно таким.
AreaVersionId AreaId VersionId PocketGroupId
------------- ------ --------- -------------
1 A V5 1
2 B V2 1
3 C V2 1
4 D V3 2
5 E V2 1
6 F V1 1
7 F V4 3
8 G V3 2
Любые идеи о том, как это можно достичь. Заранее спасибо.
Какая версия сервера sql? –