检查每组的另一列中是不是存在列值
Posted
技术标签:
【中文标题】检查每组的另一列中是不是存在列值【英文标题】:Check if a column value exists in another column per group检查每组的另一列中是否存在列值 【发布时间】:2019-03-25 13:21:37 【问题描述】:我有三个变量:一个组变量,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 组中)。
任何帮助将不胜感激。
【问题讨论】:
你应该用你正在使用的数据库标记问题。 【参考方案1】:使用不存在
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
【讨论】:
【参考方案2】:使用 cte 和 temptables 的另一种方法:
-
找出未包含在同一 mygroup 的 var1 中的 var2 值
列出 mygroups 并将它们分组到您在步骤 1 中找到的列表中的 var2。
试试下面:
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。
【讨论】:
以上是关于检查每组的另一列中是不是存在列值的主要内容,如果未能解决你的问题,请参考以下文章
检查一列中的值是不是存在于另一列中,如果存在,则将另一列中的值复制到新列中
CodeIgniter 查询:如何将列值移动到同一行中的另一列并将当前时间保存在原始列中?