Проверьте, существует ли значение столбца в другом столбце на группу - PullRequest
0 голосов
/ 25 марта 2019

У меня есть три переменные: групповая переменная, var1 и var2.Для каждой группы каждое значение var2 должно существовать в var1.Я хочу вернуть все группы, где это не так (поэтому для каждой группы я хочу знать, когда var2 не включен в var1)

Пример:

mygroup  var1       var2
1          1          -
1          2          1
1          3          2
1          4          -
2         23         23 
2         24         20 
2         26          -
3         30         10
3         20          -
3         10          -

Так что в этомВ этом случае я бы хотел, чтобы мой вывод был группой 2, поскольку 20 не входит в var1 (в группу 2).

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

использование не существует

select mygroup from table_name t1
where not exists( select 1 from table_name t2 where t1.var2=t2.var1
                and t1.mygroup=t2.mygroup)
       and t1.var2 is not null 
1 голос
/ 25 марта 2019

Другой подход к использованию cte и temptables:

  1. Узнайте значения var2, которые не включены в var1 для той же группы
  2. Перечислите мои группы и сгруппируйте их там var2 в списке, который вы нашли на шаге 1.

Попробуйте ниже:

create table #temp (mygroup int, var1 int, var2 int)
insert into #temp values 
(1 ,         1,          null),
(1 ,         2,         1),
(1 ,         3,          2),
(1 ,         4,          null),
(2 ,        23,         23 ),
(2 ,        24,         20 ),
(2 ,        26,          null),
(3 ,        30,         10),
(3 ,        20,          null),
(3 ,        10,          null)

;with cte as (
select t.mygroup, t.var1, t2.var2
from #temp t
inner join #temp t2 on t2.var2=t.var1 and t2.mygroup = t.mygroup
)
select var2
into #notIncludeList
from #temp 
where var2 not in (select var1 from cte)

select mygroup
from #temp
where var2 in (select var2 from #notIncludeList)
group by mygroup

Это решение работало в MsSql-2014.

...