如何使用相同的操作在SQL中检查几行的条件? (查看详细信息)

时间:2018-06-28 15:18:09

标签: sql sql-server

我这里的情况很罕见。

我有以下数据

Column A  Column B
--------  --------
9999      A
9999      A    
9999      V
9999      A
9999      N

7777      A
7777      A    
7777      A
7777      A
7777      N

预期结果:由于存在带有字母V的9999行,因此只会显示7777行。

我需要制定以下规则。如果列B为'N'并且不同于V(<>'V'),则显示列A。 我遇到了麻烦,因为我在A列中有几行具有相同的值,并且如果我在任何行中都不存在值'N'和'V',则只能在A列中显示该值。

我希望我能很好地解释这一点。 有人可以帮忙吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

根据提供的详细信息,这就是我想要的:

SELECT DISTINCT T1.columnA
FROM myTable T1
WHERE T1.columnB='N'
AND NOT EXISTS (SELECT 1 FROM myTable T2 WHERE T2.columnB='V' AND T1.columnA=T2.columnA)

答案 1 :(得分:2)

您可以使用聚合:

select columnA
from t
group by columnA
having sum(case when columnB = 'N' then 1 else 0 end) > 0 and
       sum(case when columnB = 'V' then 1 else 0 end) = 0 ;

编辑:

您似乎想要:

select t.*
from t
where exists (select 1
              from t t2
              where t2.id = t.id and t2.item = 'N'
             ) and
      not exists (select 1
                  from t t2
                  where t2.id = t.id and t2.item = 'V'
                 );