Comparar bloques de registros

24/02/2006 - 00:50 por jose.reyna | Informe spam
Hola a todos. estoy tratando de realizar lo siguiente

tengo una tabla con modelos por semana
sem mod componente
1 a x
1 a y
1 a z

de esta tabla tengo que armar una acumulada
mod componente
a x
a y
a z

si en la siguiente semana tengo el mismo modelo a con los mismos
componentes, la tabla acumulada se queda tal cual. pero si hay un cambio
en algun componete
debo de borrar mi modelo en la tabla acumulada y subsituirlo por el más
reciente.

1er problema es como puedo hacer para comparar en que modelos tengo
diferencias?
y como asegurarme de que tome el más reciente al insertarlos?


gracias de antemano

Salud2
Alfredo Reyna

Preguntas similare

Leer las respuestas

#1 Maxi [MVP]
24/02/2006 - 01:09 | Informe spam
Hola, podrias pasarnos mejor las estructuras de las tablas y datos reales?


Salu2
-
[MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org

MSN:

"Alfredo Reyna" escribió en el mensaje
news:%
Hola a todos. estoy tratando de realizar lo siguiente

tengo una tabla con modelos por semana
sem mod componente
1 a x
1 a y
1 a z

de esta tabla tengo que armar una acumulada
mod componente
a x
a y
a z

si en la siguiente semana tengo el mismo modelo a con los mismos
componentes, la tabla acumulada se queda tal cual. pero si hay un cambio
en algun componete
debo de borrar mi modelo en la tabla acumulada y subsituirlo por el más
reciente.

1er problema es como puedo hacer para comparar en que modelos tengo
diferencias?
y como asegurarme de que tome el más reciente al insertarlos?


gracias de antemano

Salud2
Alfredo Reyna

Respuesta Responder a este mensaje
#2 jose.reyna
24/02/2006 - 01:28 | Informe spam
Maxi [MVP] wrote:

Hola, podrias pasarnos mejor las estructuras de las tablas y datos reales?



Gracias por responder. envio lo que me comentas


CREATE TABLE [dbo].[estructuras] (
[idestructura] [int] IDENTITY (1, 1) NOT NULL ,
[semfis] [decimal](2, 0) NULL ,
[division] [char] (2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[modelo] [char] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[numparte] [char] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[uso] [decimal](15, 8) NULL ,
[cantprodm] [decimal](15, 5) NULL ,
[cantexist] [decimal](14, 5) NULL ,
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[estructurasUnicas] (
[division] [char] (2) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[modelo] [char] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[numparte] [char] (25) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[uso] [decimal](15, 5) NOT NULL ,
[cantprodm] [decimal](15, 5) NULL ,
) ON [PRIMARY]
GO


Ejemplo

Estructuras

31 21 02B018GG21580 02A018GG43560 1.00000000 29672.00000 29672.00000

32 21 02B018GG21580 02A018GG22222 1.00000000 9816.00000 9816.00000

Estructurasunicas
21 02B018GG21580 02A018GG43560 1.00000000 29672.00000 29672.00000

cambio en la sig. semana (32) y ahora debe de estar
Estructuasunicas
21 02B018GG21580 02A018GG22222 1.00000000 9816.00000

este ejemplo es de un modelo un numero de parte
pero tengo modelos con más de 500 numeros de parte.

Gracias

Saludos

Alfredo Reyna
Respuesta Responder a este mensaje
#3 Alejandro Mesa
24/02/2006 - 01:29 | Informe spam
Alfredo,

Quizas la operacion de division relacional te sea de ayuda para esto.



select a.modelo
into #t3
from t1 as a
inner join t2 as b
on a.modelo = b.modelo and a.componente = b.componente
group by a.modelo
having count(distinct a.componente) = (select count(*) from t2 as c where
c.modelo = a.modelo)

delete t1
where not exists(
select *
from #t3 as a
where a.modelo = t1.modelo
)

insert into t1
select *
from t2
where not exists(
select *
from #t3 as a
where a.modelo = t2.modelo
)

drop table #t3
go

Relational Division
http://www.dbazine.com/ofinterest/o...20division


AMB

"Alfredo Reyna" wrote:

Hola a todos. estoy tratando de realizar lo siguiente

tengo una tabla con modelos por semana
sem mod componente
1 a x
1 a y
1 a z

de esta tabla tengo que armar una acumulada
mod componente
a x
a y
a z

si en la siguiente semana tengo el mismo modelo a con los mismos
componentes, la tabla acumulada se queda tal cual. pero si hay un cambio
en algun componete
debo de borrar mi modelo en la tabla acumulada y subsituirlo por el más
reciente.

1er problema es como puedo hacer para comparar en que modelos tengo
diferencias?
y como asegurarme de que tome el más reciente al insertarlos?


gracias de antemano

Salud2
Alfredo Reyna


Respuesta Responder a este mensaje
#4 jose.reyna
24/02/2006 - 16:19 | Informe spam
Gracias Alejandro. por tu respuesta.

al momento me hace un espejo de las dos tablas es decir me duplica los
modelos en las unicas pero voy a revisar la consulta y el articulo.

en caso de no encontrar la solucion los molesto nuevamente

gracias y saludos.




Alejandro Mesa wrote:

Alfredo,

Quizas la operacion de division relacional te sea de ayuda para esto.



select a.modelo
into #t3
from t1 as a
inner join t2 as b
on a.modelo = b.modelo and a.componente = b.componente
group by a.modelo
having count(distinct a.componente) = (select count(*) from t2 as c where
c.modelo = a.modelo)

delete t1
where not exists(
select *
from #t3 as a
where a.modelo = t1.modelo
)

insert into t1
select *
from t2
where not exists(
select *
from #t3 as a
where a.modelo = t2.modelo
)

drop table #t3
go

Relational Division



http://www.dbazine.com/ofinterest/o...20division


AMB

"Alfredo Reyna" wrote:

> Hola a todos. estoy tratando de realizar lo siguiente
>
> tengo una tabla con modelos por semana
> sem mod componente
> 1 a x
> 1 a y
> 1 a z
>
> de esta tabla tengo que armar una acumulada
> mod componente
> a x
> a y
> a z
>
> si en la siguiente semana tengo el mismo modelo a con los mismos
> componentes, la tabla acumulada se queda tal cual. pero si hay un cambio
> en algun componete
> debo de borrar mi modelo en la tabla acumulada y subsituirlo por el mà¡s
> reciente.
>
> 1er problema es como puedo hacer para comparar en que modelos tengo
> diferencias?
> y como asegurarme de que tome el mà¡s reciente al insertarlos?
>
>
> gracias de antemano
>
> Salud2
> Alfredo Reyna
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida