有人可以让我知道如何使用 SQL 获取以不同方式相交的三行的不同段吗?#t2 中的三行代表集合 A、B、C - 我正在寻找 AIB、AIC、BIC、AIBIC、A'、B'、C' 等,(在维恩图中有 3 行的 7 个可能段)我是交叉口。
我正在寻找一种通用解决方案,它可以处理#t2 中的 n 行。
-- SQL Code Begin
create table #t1 (key1 int, key2 int) -- for each Key1 there can be 1 or more Key2
go
create table #t2 (row_id int identity(101, 1), key1 int) --row_id is the primary key
go
insert into #t1
select 1, 11 union select 1, 12 union select 1, 13 union select 1, 14 union
select 2, 13 union select 2, 15 union select 2, 16 union select 2, 17 union
select 3, 13 union select 3, 12 union select 3, 16 union select 3, 17
-- 1 --> 11, 12, 13, 14
-- 2 --> 13, 15, 16, 17
-- 3 --> 13, 12, 16, 17
insert into #t2 (key1)
select 1 union select 2 union select 3
-- SQL Code End
我正在寻找的输出是,
1001 11 (A')
1001 14 (A')
1002 12 (A I C - A I B I C)
1003 13 (A I B I C)
1004 15 (B')
1005 16 (B I C - A I B I C)
1005 17 (B I C - A I B I C)
输出有 5 个段,而不是可能的 7 个段,因为其中两个为 NULL。