【问题标题】: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 组中)。

任何帮助将不胜感激。

【问题讨论】:

  • 你应该用你正在使用的数据库标记问题。

标签: sql group-by exists


【解决方案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 的另一种方法:

    1. 找出未包含在同一 mygroup 的 var1 中的 var2 值
    2. 列出 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2022-08-26
      • 1970-01-01
      • 2019-02-22
      • 2022-12-12
      • 2014-01-30
      相关资源
      最近更新 更多