Excluyendo todos los registros con la misma ID si algún registro con esa ID cumple dos condiciones.
Tengo una tabla que se ve así:
ID Mascota
01 Perro
01 Gato
01 Loro
01 Cobaya
02 Perro
02 Cobaya
03 Loro
Si un ID tiene un perro y un gato, entonces quiero excluir TODOS los registros para ese ID, independientemente de qué otros animales tengan. Entonces, mi tabla de salida se vería así:
ID Mascota
02 Perro
02 Cobaya
03 Loro
Este es el query que he intentado:
PROC SQL;
CREAT TABLE nueva_tabla AS
SELECT * from Mascotas a
WHERE NOT EXISTS (SELECT *
FROM Mascotas b
WHERE b.ID = a.ID
AND b.ID = "Perro"
AND b.ID = "Guinea Gato"));
RUN;
Esto no parece estar funcionando y no está filtrando nada en realidad.
davy.ai
Hay algunos problemas con la consulta proporcionada. Primero, la segunda condición en la subconsulta debería verificar si la mascota es un perro o un gato, no un perro y un gato. Segundo, la subconsulta solo debería devolver la ID si tiene tanto un perro como un gato, no cualquier otra combinación de animales. Finalmente, la consulta principal debe unirse en la columna ID para filtrar las IDs no deseadas.
Aquí tienes una consulta corregida:
Esta consulta selecciona primero todos los registros de la tabla
Mascotas
, pero también incluye una subconsulta que filtra cualquier ID que tenga tanto un perro como un gato. La subconsulta selecciona solo las IDs que tienen un perro y un gato usando la cláusulaHAVING
para contar el número de mascotas distintas para cada ID y solo devuelve aquellas con un recuento de 2. Luego, estas IDs se unen nuevamente a la tabla principal en la columna ID y se filtran los registros con una ID coincidente utilizando la cláusulaWHERE
.El resultado debería ser una nueva tabla con solo los registros deseados: