Ver Mensaje Individual
  #4 (permalink)  
Antiguo 03/01/2007, 11:57
Avatar de Andres95
Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años
Puntos: 38
Re: Ayuda Chikos Con un Stored

Segun yo, seria algo como esto.
Si existen indices para los campos de los joins, esto deberia correr muy rapido.


Secuencias: NumFabrica, IdFolioOrigen, IDLGS
ABFoliosPedidos : IdFolio
ABAsignaciones : IdLGS

Código:
Declare @NumerosFabDupDifAsig table( 
        Grupo1            smallint
       ,Secuencia1        smallint
       ,NumeroFabrica1    char(25)
       ,Origen1           char(3)
       ,Grupo2            smallint
       ,Secuencia2        smallint
       ,NumeroFabrica2    char(25)
       ,Origen2           char(3)
       ,Cuenta1           int
       ,Cuenta2           int)


Insert into @NumerosFabDupDifAsig
Select   a.IdLGS                       IdLGS1
        ,a.IdGrupo                     IdGrupo1 
        ,a.IdSecuencia                 IdSecuencia1  
        ,a.NumFabrica                  NumFabrica1
        ,isnull(F1.IdCve, '0')         Origen1 
        ,b.IdLGS                       IdLGS2
        ,b.IdGrupo                     IdGrupo2
        ,b.IdSecuencia                 IdSecuencia2
        ,b.NumFabrica                  NumFabrica2
        ,isnull(F2.IdCve,'0')          Origen2
        ,isnull(count(G1.IdAsigna),0)  Cuenta1
        ,isnull(count(G2.IdAsigna),0)  Cuenta2
From    Secuencias a (nolock)
Inner join 
        Secuencias b (nolock)
On      a.NumFabrica    = b.NumFabrica      And 
        a.IdFolioOrigen = b.IdFolioOrigen   And 
        a.IdLGS <> b.IdLGS 
Left outer join
        ABFoliosPedidos   F1 (nolock)
On      a.IdFolioOrigen  = F1.IdFolio
Left outer join
        ABFoliosPedidos   F2 (nolock)
On      b.IdFolioOrigen  = F2.IdFolio
Left outer join
        ABAsignaciones    G1 (nolock)
On      a.IdLGS = G1.IdLGS
Left outer join
        ABAsignaciones    G2 (nolock)
On      b.IdLGS = G2.IdLGS
Order by 
        a.NumFabrica, 
        b.NumFabrica 

--------------------------------------------------------------------------------------
-- Aqui tengo duda:  Segun yo, se debe seleccionar solo aquellos 
-- registros donde no exista correspondencia entre entre la pareja Grupo y Secuencia
-- de ambas tablas.
-- Es decir, si un grupo y secuencia de A1 se encuentra tambien en A2 ya no se muestra
-- y viceversa.
--------------------------------------------------------------------------------------
Select N1.* 
From   @NumerosFabDupDifAsig N1 
Left outer join
       @NumerosFabDupDifAsig N2
On     N1.Grupo1      = N2.Grupo2     And
       N1.Secuencia1  = N2.Secuencia2 
Left outer join
       @NumerosFabDupDifAsig N3
On     N1.Grupo2      = N3.Grupo1     And
       N1.Secuencia2  = N3.Secuencia1 
Where  N2.Grupo2 is null    And 
       N3.Grupo1 is null    And 
       N1.Cuenta1 <> N1.Cuenta2


Un saludo y Feliz año nuevo a todos!

__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.