Eliminar duplicados ojala solo fuera eso!!

03/12/2007 - 15:17 por gandy | Informe spam
Hola, primero perdonar mi negación para la expresión escrita...

Colate es así; [tempo], [stampo], [nome_prodotto], [id_h],
[tempo_preparazione_s], [num_extra_time], [err_in_colata_prec], [barcode],
[tempo_ricetta], [num_macchina], [num_testa], [num_prog], [num_col_mac],
[num_col_tes], [port_iso_set], [port_pol1_set], [port_pol2_set],
[port_cat_set], [pres_iso_set], [pres_pol1_set], [pres_pol2_set],
[pres_cat_set], [temp_iso_set], [temp_pol1_set], [temp_pol2_set],
[temp_cat_set], [peso_col_set], [port_iso_real], [port_pol1_real],
[port_pol2_real], [port_cat_real], [pres_iso_real], [pres_pol1_real],
[pres_pol2_real], [pres_cat_real], [temp_iso_real], [temp_pol1_real],
[temp_pol2_real], [temp_cat_real], [peso_col_real], [port_iso_all],
[port_pol1_all], [port_pol2_all], [port_cat_all], [pres_iso_all],
[pres_pol1_all], [pres_pol2_all], [pres_cat_all], [temp_iso_all],
[temp_pol1_all], [temp_pol2_all], [temp_cat_all], [peso_col_all],
[col_senza_all], [peso_col_iso], [peso_col_pol1], [peso_col_pol2],
[peso_col_cat], [num_carosello], [cod_porta_stampo], [cod_stampo_a],
[cod_stampo_b], [idasa]

si hago
- Select distinct from colate
me dice que tengo 600 registros dferentes, ojo registros para SQL,
esto es que tienen todos sus campos distintos, no? pero yo sé que lo que
quiero es otra cosa, que los campos que realmente hacen distinto a un
registro son 5, los de la siguiente sentencia, que si estos son distintos el
registro es distinto, y si sql me dice que no es por que la tabla esta mal y
duplica valores, y atención a esto; haciendo distintos algunos campos, por
que le sale de dentro al que los mete, de tal forma que la select distinct me
dice que hay menos campos que los que realmetne hay.
Si hago
- select tempo,id_h,cod_porta_stampo, stampo, num_carosello, count (*)
RESPES
from colate
group by tempo,id_h,cod_porta_stampo, stampo, num_carosello
having count (*)>1
Me dice dice que 650, que se repiten entre 6, 2, 3 cada uno de ellos.
Quiero coger el resultado de esta select pero con todos los campos y
meterlos en una tabla temporal, para poder eliminar sin problemas de colate
los duplicados y luego volver a meter estos datos sin el campo "repes" en
colate, para así tener todos los campos pero sin duplicados.

Gracias,

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
03/12/2007 - 15:51 | Informe spam
Sigue el mismo hilo que iniciastes la semana pasada.


AMB

"gandy" wrote:

Hola, primero perdonar mi negación para la expresión escrita...

Colate es así; [tempo], [stampo], [nome_prodotto], [id_h],
[tempo_preparazione_s], [num_extra_time], [err_in_colata_prec], [barcode],
[tempo_ricetta], [num_macchina], [num_testa], [num_prog], [num_col_mac],
[num_col_tes], [port_iso_set], [port_pol1_set], [port_pol2_set],
[port_cat_set], [pres_iso_set], [pres_pol1_set], [pres_pol2_set],
[pres_cat_set], [temp_iso_set], [temp_pol1_set], [temp_pol2_set],
[temp_cat_set], [peso_col_set], [port_iso_real], [port_pol1_real],
[port_pol2_real], [port_cat_real], [pres_iso_real], [pres_pol1_real],
[pres_pol2_real], [pres_cat_real], [temp_iso_real], [temp_pol1_real],
[temp_pol2_real], [temp_cat_real], [peso_col_real], [port_iso_all],
[port_pol1_all], [port_pol2_all], [port_cat_all], [pres_iso_all],
[pres_pol1_all], [pres_pol2_all], [pres_cat_all], [temp_iso_all],
[temp_pol1_all], [temp_pol2_all], [temp_cat_all], [peso_col_all],
[col_senza_all], [peso_col_iso], [peso_col_pol1], [peso_col_pol2],
[peso_col_cat], [num_carosello], [cod_porta_stampo], [cod_stampo_a],
[cod_stampo_b], [idasa]

si hago
- Select distinct from colate
me dice que tengo 600 registros dferentes, ojo registros para SQL,
esto es que tienen todos sus campos distintos, no? pero yo sé que lo que
quiero es otra cosa, que los campos que realmente hacen distinto a un
registro son 5, los de la siguiente sentencia, que si estos son distintos el
registro es distinto, y si sql me dice que no es por que la tabla esta mal y
duplica valores, y atención a esto; haciendo distintos algunos campos, por
que le sale de dentro al que los mete, de tal forma que la select distinct me
dice que hay menos campos que los que realmetne hay.
Si hago
- select tempo,id_h,cod_porta_stampo, stampo, num_carosello, count (*)
RESPES
from colate
group by tempo,id_h,cod_porta_stampo, stampo, num_carosello
having count (*)>1
Me dice dice que 650, que se repiten entre 6, 2, 3 cada uno de ellos.
Quiero coger el resultado de esta select pero con todos los campos y
meterlos en una tabla temporal, para poder eliminar sin problemas de colate
los duplicados y luego volver a meter estos datos sin el campo "repes" en
colate, para así tener todos los campos pero sin duplicados.

Gracias,

Respuesta Responder a este mensaje
#2 Alfredo Novoa
03/12/2007 - 16:09 | Informe spam
On Mon, 3 Dec 2007 06:17:00 -0800, gandy
wrote:

Hola, primero perdonar mi negación para la expresión escrita...

Colate es así; [tempo], [stampo], [nome_prodotto], [id_h],
[tempo_preparazione_s], [num_extra_time], [err_in_colata_prec], [barcode],
[tempo_ricetta], [num_macchina], [num_testa], [num_prog], [num_col_mac],
[num_col_tes], [port_iso_set], [port_pol1_set], [port_pol2_set],
[port_cat_set], [pres_iso_set], [pres_pol1_set], [pres_pol2_set],
[pres_cat_set], [temp_iso_set], [temp_pol1_set], [temp_pol2_set],
[temp_cat_set], [peso_col_set], [port_iso_real], [port_pol1_real],
[port_pol2_real], [port_cat_real], [pres_iso_real], [pres_pol1_real],
[pres_pol2_real], [pres_cat_real], [temp_iso_real], [temp_pol1_real],
[temp_pol2_real], [temp_cat_real], [peso_col_real], [port_iso_all],
[port_pol1_all], [port_pol2_all], [port_cat_all], [pres_iso_all],
[pres_pol1_all], [pres_pol2_all], [pres_cat_all], [temp_iso_all],
[temp_pol1_all], [temp_pol2_all], [temp_cat_all], [peso_col_all],
[col_senza_all], [peso_col_iso], [peso_col_pol1], [peso_col_pol2],
[peso_col_cat], [num_carosello], [cod_porta_stampo], [cod_stampo_a],
[cod_stampo_b], [idasa]

si hago
- Select distinct from colate
me dice que tengo 600 registros dferentes, ojo registros para SQL,
esto es que tienen todos sus campos distintos, no? pero yo sé que lo que
quiero es otra cosa, que los campos que realmente hacen distinto a un
registro son 5, los de la siguiente sentencia, que si estos son distintos el
registro es distinto, y si sql me dice que no es por que la tabla esta mal y
duplica valores, y atención a esto; haciendo distintos algunos campos, por
que le sale de dentro al que los mete, de tal forma que la select distinct me
dice que hay menos campos que los que realmetne hay.
Si hago
- select tempo,id_h,cod_porta_stampo, stampo, num_carosello, count (*)
RESPES
from colate
group by tempo,id_h,cod_porta_stampo, stampo, num_carosello
having count (*)>1
Me dice dice que 650, que se repiten entre 6, 2, 3 cada uno de ellos.
Quiero coger el resultado de esta select pero con todos los campos y
meterlos en una tabla temporal, para poder eliminar sin problemas de colate
los duplicados y luego volver a meter estos datos sin el campo "repes" en
colate, para así tener todos los campos pero sin duplicados.



Pues me parece muy bien, adelante y mucha suerte :-)


Saludos
Respuesta Responder a este mensaje
#3 Juan Carlos Mendoza
04/12/2007 - 00:17 | Informe spam
Lo que se me ocurre es aplicable para una sola vez.



1 usar un cursor
2. Definir un cursor por el select de los campos agrupados por los 5,
luego al realizar cada FETCH, seleccionar todos los campos o columnas
de ese registro, mediante un SELECT TOP 1 where

Con eso obtienes lo que quieres. sin embargo me queda una duda, como
sabras cual registro es el correcto, cuando al hacer el SELECT TOP 1
exista mas de una fila que cumpla la condicion y se diferencian por un
campo que no es clave?
cuidado al hacer tu seleccion.

Te recomendaría que verifiques algunos registros y verifiques de que
son exactamente iguales en todos sus campos (el sql te dijo que no, y
el sql no miente.)

Saludos,

Juan Carlos Mendoza
Callao - Peru

On 3 dic, 10:09, Alfredo Novoa wrote:
On Mon, 3 Dec 2007 06:17:00 -0800, gandy





wrote:
>Hola, primero perdonar mi negación para la expresión escrita...

>Colate es así; [tempo], [stampo], [nome_prodotto], [id_h],
>[tempo_preparazione_s], [num_extra_time], [err_in_colata_prec], [barcode],
>[tempo_ricetta], [num_macchina], [num_testa], [num_prog], [num_col_mac],
>[num_col_tes], [port_iso_set], [port_pol1_set], [port_pol2_set],
>[port_cat_set], [pres_iso_set], [pres_pol1_set], [pres_pol2_set],
>[pres_cat_set], [temp_iso_set], [temp_pol1_set], [temp_pol2_set],
>[temp_cat_set], [peso_col_set], [port_iso_real], [port_pol1_real],
>[port_pol2_real], [port_cat_real], [pres_iso_real], [pres_pol1_real],
>[pres_pol2_real], [pres_cat_real], [temp_iso_real], [temp_pol1_real],
>[temp_pol2_real], [temp_cat_real], [peso_col_real], [port_iso_all],
>[port_pol1_all], [port_pol2_all], [port_cat_all], [pres_iso_all],
>[pres_pol1_all], [pres_pol2_all], [pres_cat_all], [temp_iso_all],
>[temp_pol1_all], [temp_pol2_all], [temp_cat_all], [peso_col_all],
>[col_senza_all], [peso_col_iso], [peso_col_pol1], [peso_col_pol2],
>[peso_col_cat], [num_carosello], [cod_porta_stampo], [cod_stampo_a],
>[cod_stampo_b], [idasa]

>si hago
>- Select distinct from colate
> me dice que tengo 600 registros dferentes, ojo registros para SQL,
>esto es que tienen todos sus campos distintos, no? pero yo sé que lo que
>quiero es otra cosa, que los campos que realmente hacen distinto a un
>registro son 5, los de la siguiente sentencia, que si estos son distintos el
>registro es distinto, y si sql me dice que no es por que la tabla esta mal y
>duplica valores, y atención a esto; haciendo distintos algunos campos, por
>que le sale de dentro al que los mete, de tal forma que la select distinct me
>dice que hay menos campos que los que realmetne hay.
>Si hago
>- select tempo,id_h,cod_porta_stampo, stampo, num_carosello, count (*)
>RESPES
> from colate
> group by tempo,id_h,cod_porta_stampo, stampo, num_carosello
> having count (*)>1
>Me dice dice que 650, que se repiten entre 6, 2, 3 cada uno de ellos.
>Quiero coger el resultado de esta select pero con todos los campos y
>meterlos en una tabla temporal, para poder eliminar sin problemas de colate
>los duplicados y luego volver a meter estos datos sin el campo "repes" en
>colate, para así tener todos los campos pero sin duplicados.

Pues me parece muy bien, adelante y mucha suerte :-)

Saludos- Ocultar texto de la cita -

- Mostrar texto de la cita -
Respuesta Responder a este mensaje
#4 Alfredo Novoa
04/12/2007 - 13:03 | Informe spam
On Mon, 3 Dec 2007 15:17:47 -0800 (PST), Juan Carlos Mendoza
wrote:

1 usar un cursor
2. Definir un cursor por el select de los campos agrupados por los 5,
luego al realizar cada FETCH, seleccionar todos los campos o columnas
de ese registro, mediante un SELECT TOP 1 where



Creo que hay otras soluciones sin tener que recurrir a cursores como
usar RANK o ROW_NUMBER o una columna identity.

Te recomendaría que verifiques algunos registros y verifiques de que
son exactamente iguales en todos sus campos (el sql te dijo que no, y
el sql no miente.)



Bueno, si hay nulos de por medio a veces si que miente, pero eso es
otra historia :-)


Saludos
Alfredo
Respuesta Responder a este mensaje
#5 gandy
05/12/2007 - 12:54 | Informe spam
Hola y gracias antes de pedior nada más...
el caso es que hago esto...
use pruebas

declare @tempo datetime, @id_h smallint, @cod_porta_stampo smallint, @stampo
nchar, @num_carosello smallint, @repes int
declare c_colate cursor for
Select tempo, id_h, cod_porta_stampo, stampo, num_carosello, count (*) repes
from colate
group by tempo, id_h, cod_porta_stampo, stampo, num_carosello
having count(*)>1
OPEN c_colate -- Abro cursor
WHILE(1=1) -- entro en el ciclo
BEGIN
FETCH NEXT FROM c_colate INTO @tempo, @id_h, @cod_porta_stampo, @stampo,
@num_carosello
IF (@@fetch_status < 0)
select top 1 [tempo], [stampo], [nome_prodotto], [id_h],
[tempo_preparazione_s], [num_extra_time], [err_in_colata_prec], [barcode],
[tempo_ricetta], [num_macchina], [num_testa], [num_prog], [num_col_mac],
[num_col_tes], [port_iso_set], [port_pol1_set], [port_pol2_set],
[port_cat_set], [pres_iso_set], [pres_pol1_set], [pres_pol2_set],
[pres_cat_set], [temp_iso_set], [temp_pol1_set], [temp_pol2_set],
[temp_cat_set], [peso_col_set], [port_iso_real], [port_pol1_real],
[port_pol2_real], [port_cat_real], [pres_iso_real], [pres_pol1_real],
[pres_pol2_real], [pres_cat_real], [temp_iso_real], [temp_pol1_real],
[temp_pol2_real], [temp_cat_real], [peso_col_real], [port_iso_all],
[port_pol1_all], [port_pol2_all], [port_cat_all], [pres_iso_all],
[pres_pol1_all], [pres_pol2_all], [pres_cat_all], [temp_iso_all],
[temp_pol1_all], [temp_pol2_all], [temp_cat_all], [peso_col_all],
[col_senza_all], [peso_col_iso], [peso_col_pol1], [peso_col_pol2],
[peso_col_cat], [num_carosello], [cod_porta_stampo], [cod_stampo_a],
[cod_stampo_b], [idasa]
INTO colate_reg_completos
FROM [pruebas].[dbo].[colate]
where @tempo=colate.tempo and @id_h=colate.id_h and
@cod_porta_stampo=colate.cod_porta_stampo and @stampo=colate.stampo and
@num_carosello=colate.num_carosello
BREAK -- Rompo el Ciclo
END
DEALLOCATE c_colate -- Quito mi cursor de la memoria
y me responde esto

Servidor: mensaje 16924, nivel 16, estado 1, línea 13
Cursorfetch: el número de variables declaradas en la lista INTO debe
coincidir con el de columnas seleccionadas.

(0 filas afectadas)

"Alfredo Novoa" wrote:

On Mon, 3 Dec 2007 15:17:47 -0800 (PST), Juan Carlos Mendoza
wrote:

>1 usar un cursor
>2. Definir un cursor por el select de los campos agrupados por los 5,
>luego al realizar cada FETCH, seleccionar todos los campos o columnas
>de ese registro, mediante un SELECT TOP 1 where

Creo que hay otras soluciones sin tener que recurrir a cursores como
usar RANK o ROW_NUMBER o una columna identity.

>Te recomendaría que verifiques algunos registros y verifiques de que
>son exactamente iguales en todos sus campos (el sql te dijo que no, y
>el sql no miente.)

Bueno, si hay nulos de por medio a veces si que miente, pero eso es
otra historia :-)


Saludos
Alfredo

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida