显示只有两个值之一

时间:2017-10-10 14:19:04

标签: sql sql-server

目前有下表:

+---------+------------+
| Name    | Number     |
+---------+------------+
|    John |   Supp#10  |
|    John |   1150-20  |
|    Doe  |   1140-09  |
+---------+------------+

John同时拥有Supp#10和1150-20值。 Doe只有1140-09而不是Supp%xx值。这个Supp#可以以任何数字结尾。

我要求的结果如下

+---------+
| Name    |
+---------+
|    Doe  |
+---------+

由于Doe没有任何以Supp#开头的值,但在语法中有一个数字'% - %'

我尝试了以下

select name from t where number like '%-%' and number not like 'Support%'

但这显然不起作用,我似乎无法弄清楚如何让它发挥作用。

2 个答案:

答案 0 :(得分:1)

这是一种方式:

select name
from t
group by name
having sum(case when number like 'Supp#%' then 1 else 0 end) = 0;

答案 1 :(得分:0)

您可以使用联接和

的有效结果
select distinct  name 
from t 
inner join( 
  select  name 
  from t 
  where number not like 'Supp%'
) t2 on t.name =  t2.name
where number like '%-%'