SQL Группировать связанные строки при перекрытии (транзитивная связь?) - PullRequest
0 голосов
/ 26 мая 2020

У меня есть следующие наборы результатов:

Эти значения взяты из реляционной таблицы

ProductId, GroupId
1 | 4
2 | 4
2 | 5
3 | 4
3 | 5

CategoryId | ProductId
1 | 1
1 | 2
1 | 3

Все следующие «Id» относятся к категории этих продуктов

Example 1:       Example 2:           Example 3:

|Id |Group|      |Id |Group    |      |Id |Group    |
-----------      ---------------      ---------------
| 1 | 4   |      | 1 | 4,5     |      | 1 | 3,5     |
| 1 | 4,5 |      | 1 | 3,4,5,6 |      | 1 | 3,4,5,6 |
| 1 | 5,7 |      | 1 | 5,7     |      | 1 | 4,5     |
-----------      ---------------      ---------------

Мне нужно обработать эти таблицы, чтобы получить следующие результаты

Result 1:        Result 2:            Result 3:

|Id |Group|      |Id |Group    |      |Id |Group    |
-----------      ---------------      ---------------
| 1 | 4,5 |      | 1 | 3,4,5,6 |      | 1 | 3,4,5,6 |
| 1 | 4,5 |      | 1 | 3,4,5,6 |      | 1 | 3,4,5,6 |
| 1 | 5,7 |      | 1 | 5,7     |      | 1 | 3,4,5,6 |
-----------      ---------------      ---------------

Объяснение для этого, эти столбцы указывают, где должна быть размещена цена какого-либо товара, и все связанные цены должны быть в Если возможно, та же таблица, поэтому, когда группа может быть объединена с другой, это должно привести к появлению пустых пространств для столбцов, которые изначально не были для этого продукта, поэтому:

Используя пример 1, это окончательный результат:

         | G4 | G5 |
--------------------
Product1 | 10 |    |
Product2 |    | 15 |
Product3 | 14 | 18 |
--------------------

         | G5 | G7 |
--------------------
Product1 | 10 | 25 |
Product2 |    | 15 |
--------------------

Используя пример 3, это окончательный результат:

         | G3 | G4 | G5 | G6 |
------------------------------
Product1 | 10 |    | 15 | 20 |
Product2 |    |    | 17 |    |
Product3 | 14 | 18 |    |    |
------------------------------

Но я совершенно не знаю, как выполнять эти групповые объединения (пустые места в результирующем наборе не являются проблема.

1 Ответ

0 голосов
/ 27 мая 2020

Я еще не совсем понимаю проблему, но это может помочь вам определить, какие наборы групп являются подмножествами более крупных. Насколько я могу судить, это транзитивное отношение, которое вы указали в заголовке. "или наборы верхнего уровня: Поиск родителя верхнего уровня в SQL

Если у вас есть ограничение на количество возможных групп, то ответ Гордона может быть достаточным без всех рекурсивных осложнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...