SQL选择只有特定值的行

SQL选择只有特定值的行,sql,tsql,select,filter,Sql,Tsql,Select,Filter,我有一张这样的桌子 Col 1 Col 2 Col 3 1 A 1 2 A 2 3 B 1 4 C 1 5 C 2 6 D 1 如何仅获取列3=1的唯一行 我想分别得到第3行和第6行Col 2=B和D。我不想要A或C,因为它们也有col3=2 我尝试了以下几点: 按COLL col 3=1的col 2从表格组中选择col 2 但这只会显示结果的第2列,所以我不确定第3列内容是

我有一张这样的桌子

Col 1 Col 2 Col 3
1       A     1
2       A     2
3       B     1
4       C     1
5       C     2
6       D     1
如何仅获取列3=1的唯一行

我想分别得到第3行和第6行Col 2=B和D。我不想要A或C,因为它们也有col3=2

我尝试了以下几点:

按COLL col 3=1的col 2从表格组中选择col 2

但这只会显示结果的第2列,所以我不确定第3列内容是否等于1

编辑:对不起,伙计们,也许我没有把我的问题说清楚。我想得到第2列的所有行,它们只包含第3列=1和第1列

如果我尝试col3=1,它将返回4行,因为A有1行。但由于A也有一行Col 3=2,我不希望这样,C也是如此。从这个示例表中,我希望最终结果只显示2行,B和D


我的示例表就是一个示例,实际上我有大约5000行要过滤,否则我会按照你们的建议执行:

你们可能正在寻找的是子句


很难确切地知道你想要得到什么,但这是我最好的猜测:

SELECT * FROM theTable WHERE col2 NOT IN
  (SELECT col2 FROM theTable WHERE col3 <> 1)

使用MS SQL2008和以下内容进行测试,因此如果我的答案不正确,可能会阻止其他人测试他们的…:

CREATE TABLE #temp 
( 
    Col1 INT, 
    Col2 CHAR(1),
    Col3 INT
)

INSERT INTO #Temp    
    (Col1, Col2, Col3)
SELECT    1,'A',1
UNION
SELECT    2,'A',2
UNION
SELECT  3,'B', 1
UNION 
SELECT 4,'C',1
UNION 
SELECT 5,'C',2
UNION 
SELECT 6,'D',1

SELECT * FROM #temp t1
WHERE EXISTS 
(
select Col2 from #temp t2 
WHERE t2.Col2 = t1.Col2
group by col2 
having count(col3) = 1
)

DROP TABLE #temp

从表中选择*col3=1t'是阅读sql教程的时候了:对不起,伙计们,这并不像看上去那么简单。除非我遗漏了从AllisonC的SQL查询中推断出来的东西。几分钟后改变整个问题是不好的,这会使大多数答案都是错误的。最好问一个新问题。我并没有改变我的问题,但我最初的写作方式似乎让人们误解了他们的答案,所以我需要补充澄清。如果这给您带来了问题,我向您道歉。您也可以让AVGcol3=1作为第二个,最后应该是b.col3 1吗?@322896是的,修复了。谢谢。顺便说一句,谢谢你的回答!
SELECT * FROM theTable WHERE col2 NOT IN
  (SELECT col2 FROM theTable WHERE col3 <> 1)
SELECT col2
FROM your_table
GROUP BY col2
HAVING MAX(col3) = 1 AND MIN(Col3) = 1
SELECT a.col2 
FROM your_table a
WHERE a.col3=1 AND NOT EXISTS(SELECT *
                              FROM your_table b 
                              WHERE a.col2=b.col2 AND b.col3<>1)
SELECT * FROM #temp t1
WHERE EXISTS 
(
select Col2 from #Temp t2 
WHERE t2.Col2 = t1.Col2
group by col2 
having count(col3) = 1
)
CREATE TABLE #temp 
( 
    Col1 INT, 
    Col2 CHAR(1),
    Col3 INT
)

INSERT INTO #Temp    
    (Col1, Col2, Col3)
SELECT    1,'A',1
UNION
SELECT    2,'A',2
UNION
SELECT  3,'B', 1
UNION 
SELECT 4,'C',1
UNION 
SELECT 5,'C',2
UNION 
SELECT 6,'D',1

SELECT * FROM #temp t1
WHERE EXISTS 
(
select Col2 from #temp t2 
WHERE t2.Col2 = t1.Col2
group by col2 
having count(col3) = 1
)

DROP TABLE #temp