Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-08-2007
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Poder: 18
david.rguez Va por buen camino
Campos duplicados en resultados

Hola a todos/as:

A ver si alguien me puede echar un cable.

Resulta que tengo una tabla en SQL Server donde guardo una serie de resultados al calcular la trazabilidad de un producto.

Dicha tabla tiene varios campos, dos de los cuáles son enteros y representan un número de referencia y un número de referencia precedente.

Hay registros que tienen los mismos valores para esos campos (con "los mismos" me refiero comparando dos registros, no comparando un campo con otro), pero el registro NO es duplicado (ya que tengo un contador que hace las funciones de clave primaria).

Problema: Tengo que sacar como resultados en una consulta aquellos registros que tengan cierto valor en uno de esos campos, pero que NO se duplique con el otro. Para evitar líos, pongo un ejemplo:

CLAVE -------- REF --------- REF PRECEDENTE
1---------------2------------1
2---------------2------------1
3---------------3------------1
4---------------4------------3
5---------------5------------4

Yo quiero sacar aquellos resultados cuya referencia precedente sea la número 1. ¿Cuáles me sacaría?


1---2---1
2---2---1
3---3---1

Pero el problema es que los dos primeros están duplicados (en los campos que estoy considerando en esta parte del cálculo), y me interesa que si detecta un resultado que tenga un campo que YA haya salido anteriormente (en este caso el número 2), no me lo saque.

No puedo usar DISTINCT porque en realidad los registros completos no se duplican (solo algunos campos en concreto).

Tampoco puedo restringir la duplicidad de ese campo, ya que dentro de la base de datos sí debe aparecer todos los registros (aunque repitan ese campo), pero NO en los resultados de la consulta.

¿Alguna sugerencia? Me estoy empezando a calentar la cabeza
Responder Con Cita
  #2  
Antiguo 07-08-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
¿Necesitas sacar los 3 campos en la consulta (clave, ref y ref precedente)?
Responder Con Cita
  #3  
Antiguo 07-08-2007
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Poder: 18
david.rguez Va por buen camino
En realidad necesito sacar todos los campos, pero aplicando ese "filtro" que mencioné para discriminar los que se repitan en cierto campo.
Responder Con Cita
  #4  
Antiguo 07-08-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
¿Qué índices tienes? ¿Alguno más que el campo clave?
Responder Con Cita
  #5  
Antiguo 07-08-2007
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Poder: 18
david.rguez Va por buen camino
No, ninguno más.
Responder Con Cita
  #6  
Antiguo 07-08-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Pues si necesitas sacar todos los campos en una consulta lo único que se me ocurre es que utilices funciones de grupo: max(), sum()... y hagas un group by.

Sino siempre puedes procesarlo por código. Lo ordenas por el campo "ref" y guardas en una variable el último valor procesado. Si el nuevo es igual te saltas esa tupla sino la procesas y guardas el nuevo valor de "ref".
Responder Con Cita
  #7  
Antiguo 07-08-2007
david.rguez david.rguez is offline
Miembro
 
Registrado: jun 2006
Ubicación: Zamora, la bien cercada
Posts: 104
Poder: 18
david.rguez Va por buen camino
mmmhhh... quería evitar hacerlo desde código, pero veo que va a ser la mejor solución.

Gracias
Responder Con Cita
  #8  
Antiguo 07-08-2007
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Sino te vale algo así:
Código SQL [-]
select max(clave), ref, ref_precedente
from tabla
where ref_precedente=1
group by ref, ref_precedente
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Campos duplicados :) francisco260184 SQL 2 11-04-2007 10:16:33
Resultados duplicados en procedimientos jzginez Firebird e Interbase 2 09-11-2004 02:35:21
Evitar duplicados hectorin Conexión con bases de datos 2 29-10-2004 16:37:25
Registros duplicados jgutti SQL 1 02-03-2004 16:45:47
Duplicados Onti SQL 3 13-11-2003 11:48:56


La franja horaria es GMT +2. Ahora son las 16:09:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi