SQL selecciona filas con solo un cierto valor en ellas

Tengo una table como tal

Col 1 Col 2 Col 3 1 A 1 2 A 2 3 B 1 4 C 1 5 C 2 6 D 1 

¿Cómo solo obtengo filas únicas que tienen Col 3 = 1?

Quiero get las filas 3 y 6 (Col 2 = B y D, respectivamente). No quiero A ni C, ya que tienen Col 3 = 2 también.

He intentado algo como:

select col 2 from table group by col 2 having count(col 3) = 1

Pero eso solo trae a la columna 2 los resultados, así que no estoy seguro si el contenido de Col 3 = 1 o no.

EDITAR: Lo siento chicos tal vez no he formulado mi pregunta claramente. Quiero get todas las filas de Col 2 que contienen solo Col 3 = 1 Y SÓLO 1 .

Entonces, si probara WHERE Col 3= 1 , devolvería 4 filas porque A tiene 1. Pero como A también tiene una fila donde Col 3 = 2, no quiero eso, lo mismo para C. De esta tabla de ejemplo, lo haría quiere que el resultado final solo muestre 2 filas, B y D.

Mi tabla de ejemplo es un ejemplo, en realidad tengo unas 5000 filas para filtrar, de lo contrario haría lo que ustedes han sugerido 🙂

 SELECT col2 FROM your_table GROUP BY col2 HAVING MAX(col3) = 1 AND MIN(Col3) = 1 

O

 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) 
 ;with T ([Col 1], [Col 2], [Col 3]) as ( select 1, 'A', 1 union all select 2, 'A', 2 union all select 3, 'B', 1 union all select 4, 'C', 1 union all select 5, 'C', 2 union all select 6, 'D', 1 ) select * from T left outer join ( select distinct [Col 2] from T where [Col 3] <> 1 ) as T2 on T.[Col 2] = T2.[Col 2] where T.[Col 3] = 1 and T2.[Col 2] is null 

Lo que probablemente estés buscando es la cláusula WHERE .

 SELECT * FROM YouTable WHERE col3 = 1 AND col2 in ('B','D'); 

Es un poco difícil saber exactamente lo que estás tratando de get, pero esta es mi mejor suposition:

 SELECT * FROM theTable WHERE col2 NOT IN (SELECT col2 FROM theTable WHERE 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 ) 

probado con MS SQL2008 y lo siguiente (por lo tanto, si mi respuesta no es la correcta, puede que otros evalúen la suya …):

 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