首页 > 解决方案 > 转换和重复多行

问题描述

我有一个表,其中有两个名为 FamilyID 和 PersonID 的 ID。我需要能够使用所有组合重复这些行,如下面的屏幕截图所示,注意到每个数字都有一个额外的行。

在此处输入图像描述

下面是一些 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

标签: sql-servertsql

解决方案


我知道您需要某种组内匹配的完整列表,但老实说,如果您首先使用简单的英语解释业务背景会更好。

以下查询似乎会产生您的示例结果:

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;

推荐阅读