Преобразование и повторение нескольких строк - PullRequest
0 голосов
/ 29 июня 2018

У меня есть таблица, в которой есть два идентификатора: FamilyID и PersonID. Мне нужно иметь возможность повторять эти строки со всеми комбинациями, как показано на скриншоте ниже, отмечая, что каждое число получает дополнительную строку.

enter image description here

Вот несколько SQL для создания таблицы с некоторыми примерами данных. Не существует установленного количества случаев, которые могут произойти.

Кто-нибудь знает, как нас можно достичь?

CREATE TABLE #TempStackOverflow
(
    FamilyID int,
    PersonID int
)

insert into #TempStackOverflow
(
    FamilyID,
    PersonID
)
select
    1012,
    1
union
select
    1013,
    1
union
select
    1014,
    1
union
select
    1015,
    2
union
select
    14774,
    3
union
select
    1019,
    5

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Я понимаю, что вам нужен какой-то полный список совпадений в группах, но, честно говоря, было бы намного лучше, если бы вы объяснили бизнес-контекст, используя простой английский, в первую очередь.

Кажется, что следующий запрос приводит к вашему примеру:

with cte as (
    select a.FamilyID, a.PersonID, a.PersonID as [GroupId] from #TempStackOverflow a
    union all
    select b.PersonID, b.FamilyID, b.PersonID from #TempStackOverflow b
)
select distinct c.FamilyID, s.PersonID
from cte c
    inner join cte s on s.GroupId = c.GroupId
where c.FamilyID != s.PersonID;
0 голосов
/ 29 июня 2018

Вот самая простая версия, которую я могу придумать, которая группирует элементы по PersonId, как вы делали выше. Очевидно, что если вы этого не хотите, то можете удалить внешний запрос.

SELECT FamilyId,
    PersonID
FROM (
    SELECT FamilyId, PersonId, PersonID as SortBy
    FROM #TempStackOverflow t1
    UNION
    SELECT PersonId, FamilyId, PersonId as SortBy
    FROM #TempStackOverflow t1
    UNION
    SELECT t1.FamilyID, t2.FamilyID, t1.PersonID as SortBy
    FROM #TempStackOverflow t1
    FULL OUTER JOIN #TempStackOverflow t2
        ON t1.PersonID = t2.PersonID
    WHERE t1.FamilyID != t2.FamilyID
    ) as Src
ORDER BY SortBy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...