Filtro

Hola.
Tengo los siguientes datos con la siguiente estructura de tabla:
Estructura:
buzo_rut
zona_pesca_codigo
puerto
Los datos son algo así:
Fila1: 123456,X,QUELLON
Fila2: 123456,ZC,MELINKA
Fila3: 147258,XI,QUELLON
Fila4: 152487,ZC,MELINKA
Fila5: 785214,ZC,QUELLON
Fila6: 785214,X,QUELLON
Como puedes ver, algunos "buzo_rut" pueden tener más de un zona_pesca_codigo o puerto.
Necesito obtener:
- Los "buzo_rut" que tengan SOLAMENTE zona_pesca_codigo=X y los que tengan SOLAMENTE zona_pesca_codigo=XI, no me sirven los que tienen X y XI.
No se como filtrar eso... Gracias

2 Respuestas

Respuesta
1
Y la pregunta es, ¿ya los probaste para saber que no funcionan?
Nuevamente no es lo que necesito... otra explicación, creo que no me expreso bien...
Si hay algún buzo que tiene zona_pesca_codigo POR y que también tiene XI NO debe aparecer, sino que debe aparecer solo el buzo que tiene SOLAMENTE zona_pesca_codigo POR y que nunca ha tenido zona_pesca_codigo XI...
Entiendo lo que me dices, pero no es lo que necesito, veamos si puedo explicarlo de otra forma...
En los datos que mostré, existen buzo_rut que tienen zona_pesca_codigo POR y que también tienen zona_pesca_codigo XI, pero yo necesito aquellos buzo_rut que solo tengan zona_pesca_codigo POR, y no aquellos que tienen POR y XI
Gracias por el esfuerzo de todas formas, ojala puedas ayudarme...
Espero que hayas probado las sentencias, pero en fin, si no dan el resultado tal cual lo requieres puedes intentar con:
select * from mitabla where substring(zona_pesca_codigo,1,1)='X'
y
select * from mitabla where substring(zona_pesca_codigo,1,2)='XI'
Si ya los probé, son consultas básicas... efectivamente me muestra todos los que tienen zona_pesca_codigo POR, pero el problema esta en que de esos hay varios que también tienen zona_pesca_codigo XI y eso es lo que tengo que evitar...
Select * from mitabla where buzo_rut not in (select buzo_rut from mitabla where zona_pesca_codigo <> 'XI')
and substring(zona_pesca_codigo,1,1) = 'X'
select * from mitabla where substring(zona_pesca_codigo,1,1)='X' and zona_pesca_codigo <> 'XI'
No es tan simple... el problema es que hay buzo_rut que tienen zona_pesca_codigo POR y XI también... yo necesito aquellos buzo_rut que tienen SOLO y SOLO POR, y no los que tienen POR y XI...
Puedes comenzar con un:
select * from mitabla where zona_pesca_codigo='X'
y
select * from mitabla where zona_pesca_codigo='XI'
Respuesta
1
Con esto obtendrás lo que quieres.
SELECT BUZO_RUT, ZONA_PESCA_CODIGO, PUERTO FROM TABLA T1 WHERE (ZONA_PESCA_CODIGO = 'X' AND NOT EXISTS (SELECT 1 FROM TABLA T2 WHERE T1.BUZO_RUT = T2.BUZO_RUT AND T2.ZONA_PESCA_CODIGO = 'XI') OR ZONA_PESCA_CODIGO = 'XI' AND NOT EXISTS (SELECT 1 FROM TABLA T2 WHERE T1.BUZO_RUT = T2.BUZO_RUT AND T2.ZONA_PESCA_CODIGO = 'X'));

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas