SQL Server 2008 R2:仅和仅处于状态
下表中有两个字段:SQL Server 2008 R2:仅和仅处于状态,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,下表中有两个字段: create table teste_r ( colx varchar(10), coly varchar(10) ); colx ----- 2 插入记录: insert into teste_r values('3','A'),('3','B'),('3','C') ,('2','A'),('2','A'),('2','C') ,('1','A'),('1',
create table teste_r
(
colx varchar(10),
coly varchar(10)
);
colx
-----
2
插入记录:
insert into teste_r values('3','A'),('3','B'),('3','C')
,('2','A'),('2','A'),('2','C')
,('1','A'),('1','D');
colx
-----
2
注意:现在我想显示colx
,它只属于并且只属于A和C
colx
-----
2
因此,根据要求,预期结果应为:
colx
-----
2
预期结果:
colx
-----
2
您可以像这样使用
groupby
和HAVING COUNT(DISTINCT coly)
colx
-----
2
SELECT colx
FROM teste_r r
WHERE r.coly IN('A','C')
GROUP BY colx
HAVING COUNT(distinct coly) = (SELECT COUNT(distinct coly) FROM teste_r r2 WHERE r2.colx = r.colx)
AND COUNT(distinct coly) = 2
这是一个没有余数的关系除法示例。你可以得到更多的信息,这是由乔塞尔科写的
colx
-----
2
您也可以通过Dwain Camps查看这一点您可以像这样使用
groupby
和HAVING COUNT(DISTINCT coly)
colx
-----
2
SELECT colx
FROM teste_r r
WHERE r.coly IN('A','C')
GROUP BY colx
HAVING COUNT(distinct coly) = (SELECT COUNT(distinct coly) FROM teste_r r2 WHERE r2.colx = r.colx)
AND COUNT(distinct coly) = 2
select DISTINCT a.colx
from teste_r a,
teste_r b
WHERE a.colx = b.colx
AND ((a.coly = 'A' AND b.coly = 'C') OR (a.coly = 'C' AND b.coly = 'A'))
这是一个没有余数的关系除法示例。你可以得到更多的信息,这是由乔塞尔科写的
colx
-----
2
您也可以通过Dwain Camps查看此查询,此查询的结果将如您所愿:
colx
-----
2
select DISTINCT a.colx
from teste_r a,
teste_r b
WHERE a.colx = b.colx
AND ((a.coly = 'A' AND b.coly = 'C') OR (a.coly = 'C' AND b.coly = 'A'))
SELECT DISTINCT
tr.colx
FROM dbo.teste_r AS tr
WHERE tr.colx IN (SELECT tr2.colx FROM dbo.teste_r AS tr2 WHERE tr2.coly IN ('A', 'C'))
AND tr.colx NOT IN (SELECT tr2.colx FROM dbo.teste_r AS tr2 WHERE tr2.coly NOT IN ('A', 'C'))
此查询的结果将如您所愿:
colx
-----
2
SELECT DISTINCT
tr.colx
FROM dbo.teste_r AS tr
WHERE tr.colx IN (SELECT tr2.colx FROM dbo.teste_r AS tr2 WHERE tr2.coly IN ('A', 'C'))
AND tr.colx NOT IN (SELECT tr2.colx FROM dbo.teste_r AS tr2 WHERE tr2.coly NOT IN ('A', 'C'))
您可以使用条件聚合来完成此操作:
colx
-----
2
SELECT colx FROM teste_r
GROUP BY colx
HAVING SUM(CASE WHEN coly NOT IN('A','C') THEN 1 ELSE 0 END)=0 AND COUNT(DISTINCT coly)=2
您可以使用条件聚合来完成此操作:
colx
-----
2
SELECT colx FROM teste_r
GROUP BY colx
HAVING SUM(CASE WHEN coly NOT IN('A','C') THEN 1 ELSE 0 END)=0 AND COUNT(DISTINCT coly)=2
您可以使用
不存在
:
colx
-----
2
select t.colx
from teste_r t
where t.coly IN('A','C')
and not exists ( select *
from teste_r
where colx = t.colx
and coly not in ('A', 'C'))
group by t.colx
having count(distinct t.coly) = 2
您可以使用
不存在:
colx
-----
2
select t.colx
from teste_r t
where t.coly IN('A','C')
and not exists ( select *
from teste_r
where colx = t.colx
and coly not in ('A', 'C'))
group by t.colx
having count(distinct t.coly) = 2
这个查询也给出了3。嗯,是的,我对唯一和唯一的a和c部分感到困惑,认为只有2才是答案的事实是一个错误,哈哈。。。修正它…这个查询也给出了3。嗯,是的,我对唯一和唯一的a和c部分感到困惑,认为只有2是答案应该是一个错误lol。。。修好它…太棒了!非常感谢。请在表中再添加两条记录以检查脚本。”插入测试值('4','A'),('5','C');令人惊叹的!非常感谢。请在表中再添加两条记录以检查脚本。”插入测试值('4','A'),('5','C');请在表中再添加2条记录以检查脚本。”插入测试值('4','A'),('5','C');请在表中再添加2条记录以检查脚本。”插入测试值('4','A'),('5','C');
colx
-----
2