Sql 查找没有“0”的记录;“副本”;

Sql 查找没有“0”的记录;“副本”;,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我试图在一个表中查找基于特定条件的没有“重复项”的记录。我将重复项放在引号中,因为这些记录不是文本重复项,正如我的示例数据所示 MyTable Column1-----Column2-----Column3 ABC---------123---------A ABC---------123---------Z BCD---------234---------Z CDE---------345---------A CDE---------345---------Z DEF---------456-

我试图在一个表中查找基于特定条件的没有“重复项”的记录。我将重复项放在引号中,因为这些记录不是文本重复项,正如我的示例数据所示

MyTable
Column1-----Column2-----Column3
ABC---------123---------A
ABC---------123---------Z
BCD---------234---------Z
CDE---------345---------A
CDE---------345---------Z
DEF---------456---------A
DEF---------456---------Z
EFG---------567---------Z
FGH---------678---------A
只要浏览一下这些数据,您就可以清楚地看到,第1列中包含BCD、EFG和FGH的记录没有任何额外的重复项;但是,除第3列数据外,所有其他记录看起来都相似

我可以编写一个查询来查找这三条记录,但我只关心第3列中有“Z”的记录。这将导致查询只显示BCD和EFG,而不显示FGH

因此,我想要一个查询,它将查找那些查找没有重复项(基于第1列和第2列)且第3列中有“Z”的记录


非常感谢您的帮助

您可以通过聚合和
having
子句来实现这一点:

select column1, column2, max(column3)
from mytable
group by column1, column2
having count(*) = 1 and max(column3) = 'Z';

不同的语法,相同的结果

SELECT A.column1, A.column2
FROM MyTable A
LEFT JOIN MyTable B ON A.column1= B.column1AND A.column2= B.column2
WHERE A.column3 = 'z'
GROUP BY A.column1, A.column2
HAVING COUNT(*) = 1

@达斯宾莱特。不,那与此无关。使用
MIN()
时,查询也同样有效。
MAX()
/
MIN()
的唯一目的是获取一个值。关键部分是
count(*)=1
,它保证只有一个值。啊,我看到-
count(*)=1
确保该列中的任何内容都是
MAX
MIN
,因此,
MAX
只是为了满足SQL Server的要求,即表达式是
groupby
成员或聚合。很酷!