通过组合和分组获得双打

时间:2014-08-14 10:50:07

标签: sql

我创建测试表:

CREATE TABLE #TempTable(
LoginName varchar(500),
FullName varchar(500),
mobilephone varchar(500))

填写表格:

insert into #TempTable
select 'guid1', 'FullName1', 'mobilephone1'
union select 'guid2', 'FullName1', 'mobilephone1'
union select 'guid3', 'FullName2', 'mobilephone2'
union select 'guid4', '------', 'mobilephone2'
union select 'guid5', 'FullName3', 'mobilephone3'
union select 'guid6', 'FullName3', 'mobilephone3'
union select 'guid7', 'FullName4', 'mobilephone4'
union select 'guid8', '------', 'mobilephone4'

我需要手机选择双打,其中第一个FullName有效,第二个FullName ='------' 感谢

2 个答案:

答案 0 :(得分:1)

也许这会做你想要的:

select mobilephone
from #temptable
group by mobilephone
having sum(case when FullName <> '------' then 1 else 0 end) > 0 and
       sum(case when FullName = '------' then 1 else 0 end) > 0;

SQL表表示无序集,因此除非使用列进行排序(通常是id或创建日期列),否则不存在“first”和“second”的概念。上述查询只返回所有至少有一个有效名称和一个名称仅包含连字符的手机。

答案 1 :(得分:0)

您使用的是哪个DBMS?不同的DBMS处理方式不同。你正在寻找一个条目,其中一个条目&#39; ------&#39;另一个存在。一组交集。

select mobilephone from #TempTable where LoginName = '------'
INTERSECT
select mobilephone from #TempTable where LoginName <> '------';