sql—仅将结果减少到基于单个字段的具有多个唯一行的结果

ar7v8xwq  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(218)

我的数据看起来像这样。。。

Table A

Name                 Phone
--------------------------------------
Bobs Place           111111111
Bobs Place           111111111
Jims Place           222222222
Jims Place           333333333
Lizzys Place         444444444
Lizzys Place         444444444
Lizzys Place         555555555

我需要输出是。。。

Name                 Phone
--------------------------------------
Jims Place           222222222
Jims Place           333333333
Lizzys Place         444444444
Lizzys Place         555555555

jims和lizzys有多条不同的电话线,bobs有多行…但是同一行,所以我们不关心这些行。
我尝试使用count()>1,但是bob仍然会计为2,distinct也会留下我不想要的行。

xkrw2x1b

xkrw2x1b1#

你可以用 select distinct 使用相关子查询:

select distinct name, phone
from a
where exists (select 1 from a a2 where a2.name = a.name and a2.phone <> a.phone);
gcxthw6b

gcxthw6b2#

如果您需要获得唯一的组合(姓名和电话),则首先删除重复项,然后可以使用sql server中最有效的方法-窗口/分析函数,例如计数(按名称分区)来获得正确的结果:

select name,phone from
   (
     select name,phone,count(phone)over(partition by name)countphone from
     (
      select distinct name,phone from Table
     ) t 
   )tt where countphone>1
lskq00tm

lskq00tm3#

你可以用一个 HAVING 包含查询的子句 GROUP BY 表达式:

SELECT name, phone
  FROM tab t
 GROUP BY name, phone
HAVING (SELECT COUNT(DISTINCT phone) FROM tab t2 WHERE name = t.name ) > 1

p、 实际上,如果适用于此类问题,最好使用分析函数,但我们不知道您的dbms使用的是标准sql。
演示

相关问题