Найти и сосчитать две таблицы с порядком изменения столбцов разницы - PullRequest
0 голосов
/ 19 мая 2019

У меня есть две таблицы ниже:

Таблица A:

N1 N2 N3
6  11 20

Таблица B:

N1 N2 N3 N4 N5 N6 N7 N8
1  2  5  6  10 12 14 15
1  9  10 15 16 18 19 20
4  5  8  9  10 14 15 16

Я хочу сосчитать дублирование данных в таблице B с таблицейА и результат:

1

1

0

my code (only working for tableb have 1 row):
declare @dem tinyint,
        @t1 tinyint,
        @t2 tinyint,
        @t3 tinyint,
set @dem = 0    
select @t1 = (select [n1] from [tablea])
select @t2 = (select [n2] from [tablea])
select @t3 = (select [n3] from [tablea])
if exists(select 1 from [tableb] where [n1] = @t1 or [n2] = @t1 or [n3] = @t1 or [n4] = @t1 or [n5] = @t1 or [n6] = @t1 or [n7] = @t1 or [n8] = @t1)
begin
    set @dem = @dem + 1
end
if exists(select 1 from [tableb] where [n1] = @t2 or [n2] = @t2 or [n3] = @t2 or [n4] = @t2 or [n5] = @t2 or [n6] = @t2 or [n7] = @t2 or [n8] = @t2)
begin
    set @dem = @dem + 1
end
if exists(select 1 from [tableb] where [n1] = @t3 or [n2] = @t3 or [n3] = @t3 or [n4] = @t3 or [n5] = @t3 or [n6] = @t3 or [n7] = @t3 or [n8] = @t3)
begin
    set @dem = @dem + 1
end
---
select @dem

Пожалуйста, поддержите меня в SQL-коде.Благодаря.

1 Ответ

0 голосов
/ 19 мая 2019

Перекрестное объединение таблиц и использование оператора IN.

select
  case when a.n1 in (
    b.n1, b.n2, b.n3, b.n4, b.n5, b.n6, b.n7, b.n8
  ) then 1 else 0 end +
  case when a.n2 in (
    b.n1, b.n2, b.n3, b.n4, b.n5, b.n6, b.n7, b.n8
  ) then 1 else 0 end +
  case when a.n3 in (
    b.n1, b.n2, b.n3, b.n4, b.n5, b.n6, b.n7, b.n8
  ) then 1 else 0 end counter
from tablea a cross join tableb b

См. Демоверсию .Результаты:

> | counter |
> | ------: |
> |       1 |
> |       1 |
> |       0 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...