Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Campos duplicados en resultados (https://www.clubdelphi.com/foros/showthread.php?t=46708)

david.rguez 07-08-2007 10:47:53

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 :confused:

kuan-yiu 07-08-2007 10:58:53

¿Necesitas sacar los 3 campos en la consulta (clave, ref y ref precedente)?

david.rguez 07-08-2007 11:01:50

En realidad necesito sacar todos los campos, pero aplicando ese "filtro" que mencioné para discriminar los que se repitan en cierto campo.

kuan-yiu 07-08-2007 11:11:49

¿Qué índices tienes? ¿Alguno más que el campo clave?

david.rguez 07-08-2007 11:17:02

No, ninguno más.

kuan-yiu 07-08-2007 11:25:28

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".

david.rguez 07-08-2007 11:28:43

mmmhhh... quería evitar hacerlo desde código, pero veo que va a ser la mejor solución.

Gracias :)

kuan-yiu 07-08-2007 11:42:50

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


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

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