Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/05/2011, 10:38
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: No listar datos repetidos en la misma tabla

Hola patob:

Si hubieras puesto algunos datos de ejemplo sería más fácil entender perfectamente lo que quieres hacer y por lo tanto darte una respuesta un poco más acorde a lo que necesitas, pero a falta de esta información vamos a tratar de adivinar un poco.

Creo que la idea de Heimish2000 es correcta, pero ya en otras ocasiones se ha comentado que es mejor utilizar EXISTS que IN, además creo que no había necesidad de utilizar un UNION de dos consultas. Si no estoy equivocado podría hacerse con una sola consulta:

Voy a suponer que tu tabla RUBROS tiene más o menos la siguiente información.

Código:
TCOD RUBCOD      RUBDESC
---- ----------- ----------
H    1           uno
H    2           dos
H    3           tres
H    4           cuatro
H    5           cinco
P    3           tres
P    4           cuatro
P    6           seis
Si entendí bien lo que necesitas es mostrar los 5 registros que tienen TCOD = 'H' + el registro con TCOD = 'P' y RUBCOD = 6, ya que este rubro no se encuentra entre los H's.

En el caso de los P-3 y P-4 estos no se deben mostrar porque ya existen entre los H's correcto??? Para hacer esto podrías hacer lo siguiente:

Código SQL:
Ver original
  1. DECLARE @rubros TABLE (TCOD VARCHAR, RUBCOD INT, RUBDESC VARCHAR(10))
  2. INSERT INTO @rubros VALUES ('H',1,'uno');
  3. INSERT INTO @rubros VALUES ('H',2,'dos');
  4. INSERT INTO @rubros VALUES ('H',3,'tres');
  5. INSERT INTO @rubros VALUES ('H',4,'cuatro');
  6. INSERT INTO @rubros VALUES ('H',5,'cinco');
  7. INSERT INTO @rubros VALUES ('P',3,'tres');
  8. INSERT INTO @rubros VALUES ('P',4,'cuatro');
  9. INSERT INTO @rubros VALUES ('P',6,'seis');
  10. SELECT * FROM @rubros;
  11.  
  12. SELECT * FROM @rubros T1 WHERE TCOD = 'H' OR
  13. (TCOD = 'P' AND NOT EXISTS (
  14. SELECT * FROM @rubros T2
  15. WHERE T1.RUBCOD = T2.RUBCOD AND T2.TCOD = 'H'
  16. ))

El resultado de la consulta sería:
Código:
TCOD RUBCOD      RUBDESC
---- ----------- ----------
H    1           uno
H    2           dos
H    3           tres
H    4           cuatro
H    5           cinco
P    6           seis
Espero que esto te sea de utilidad. Si no es así te pido que nos pongas algunos datos de ejemplo y lo que esperas de salida, para poder hacer pruebas.

Saludos
Leo.

------------------------------------------------------
"La vida es como un eco: cuando das algo, esto te
retorna a ti multiplicado muchas, muchas veces."
Ley del Karma.