Может кто-нибудь, пожалуйста, дайте мне знать, как получить различные сегменты трех строк, которые пересекаются по-разному с помощью SQL? Три строки в # t2 представляют множества A, B, C - Я ищу AIB, AIC, BIC, AIBIC, A ', B', C 'и т. Д. (7 возможных сегментов с 3 строками, как на диаграмме Венна) где I - пересечение.Разбиение строк в SQL
Я ищу универсальное решение, которое может обрабатывать n количество строк в # t2.
-- 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.
Вы можете изменить свой вопрос, чтобы удалить пробел перед разделами, которые на самом деле не код. Трудно прочитать, что у вас здесь есть. – Randy 2008-10-20 22:25:38
Помогите мне понять ваш вопрос. Откуда берутся письма? Вы действительно хотите получать письма в результатах? Если да, то каково правило для их назначения? Кроме того, я не понимаю вывод для чисел 12, 16 и 17, почему вы включаете пересечение A, B & C в результатах? – 2008-10-20 23:41:48
Если бы я мог перефразировать ваш вопрос, это было бы точно? Вы хотите, чтобы каждый из различных значений из # t1.key2 и какие записи в # t2 они являются членами. – 2008-10-20 23:46:02