2017-01-23 40 views
0

值我在SQL相当业余的,所以请多多包涵:)从分组列2选择的结果没有在栏3

我试图找到一个很好的查询找到所有有结果对于第3列一组中列结果的空值2

因此,举例来说,这是数据

Column1  Column2 Column3 

Product1  GroupA  Data 
Product2  GroupA  
Product3  GroupA 
Product4  GroupB 
Product5  GroupB 
Product6  GroupC  Data 

那么我的成绩寻找的是产品4与产品5,因为它们是部分GroupB并且没有结果对栏3

最终的想法TS是,产品每GroupX将在栏3至少一个条目。

什么是查找这些结果的恰当查询?

感谢您花时间回答我简单的问题:)

关心!

+0

您可以分享您迄今为止所做的工作吗? –

+0

你想找到第3列中没有任何值的组? – Viki888

回答

1

如果你想完成行,然后not exists似乎是你想要什么:

select t.* 
from t 
where not exists (select 1 
        from t t2 
        where t2.column2 = t.column2 and 
         t2.column3 is not null 
       ); 

注:这是假定空白是NULL。您可能希望最后的条件是t2.column3 <> ''

如果你只是想每列2值一列,你可以使用聚合:

select t.column2, group_concat(t.column1) as column1s 
from t 
group by t.column2 
having min(t.column2) is null; 
+0

谢谢!将测试:) – spmab

0

如果你正在寻找一个结果是给出所有Products属于Group,它没有任何价值在Column3,那么你可以试试下面的查询

select t1.Column1 
from tableName t1 
inner join (select 
       Column2, 
       count(Column2) = SUM(case when Column3 IS NULL THEN 1 ELSE 0 END) is_Valid 
      from tableName t1 
      GROUP BY Column2) t2 
on t1.Column2 = t2.Column2 
    and is_Valid = 1; 

这给了我下面的结果

enter image description here

希望这会帮助你。

+0

谢谢!将测试:) – spmab

0

您可以在这里使用NOT EXISTS或更简单的NOT IN

select * 
from mytable 
where column2 not in (select column2 from mytable where column3 is not null); 

然而,根据您认为“空白”,事情可能会变得更加复杂。如果可以有空白,你可以检查where trim(column3) > '',但如果可以有标签和其他不可见的字符,你想把它们看作是空的,那就很难解决了。

+0

谢谢!将测试:) – spmab