sql-server - 转换和重复多行
问题描述
我有一个表,其中有两个名为 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
解决方案
我知道您需要某种组内匹配的完整列表,但老实说,如果您首先使用简单的英语解释业务背景会更好。
以下查询似乎会产生您的示例结果:
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;
推荐阅读
- fadein - Scilab 上的淡入淡出功能
- delphi - CEF4Delphi 单元测试不
- html - 为什么我的导航栏将我的整体内容推到一边?
- python - 创建一个以变量为名称的文件目录
- python - SQLAlchemy 接受不同的数据类型、空字符串、更大长度的字符串等所有内容
- angular - 使用 ionic 2/3 面临无限滚动的问题
- java - 动态添加视图并调整父视图组的大小
- java - 使用 ASM 从 Java 库中对 Kotlin 类进行代理
- java - GoogleSignIn 有效,但 Google_DEFAULT_GAMES 无效
- angular - “typeof Observable”类型上不存在属性“of”