none
QUITAR DUPLICADOS DE DIFERENTES CAMPOS RRS feed

  • Pregunta

  • Estimados, tengo este inconveniente:

    Necesito quitar los Duplicados de dos Campos (DNI y Fono).

    Esta es mi query actual:

    delete #temp1
    delete #temp2
    DECLARE @Today DATE = GETDATE()
    insert into #temp1(dni,fono) select right('00000000'+dni,8), right(replace(replace(f1,' ',''),'-',''),9) from ILC_ConsolidadoDiario where fec_carga=@today and dia_atraso<=30 and f1 is not NULL and f1 not like '%ystem.Dat%'
    and f1 not like '%999999999%' and f1 not like '%11111111%' and f1!='' and len(f1)>6 group by dni,f1
    insert into #temp1(dni,fono) select right('00000000'+dni,8), right(replace(replace(f2,' ',''),'-',''),9) from ILC_ConsolidadoDiario where fec_carga=@today and dia_atraso<=30 and f2 is not NULL and f2 not like '%ystem.Dat%'
    and f2 not like '%999999999%' and f2 not like '%11111111%' and f2!='' and len(f2)>6 group by dni,f2
    insert into #temp1(dni,fono) select right('00000000'+dni,8), right(replace(replace(f3,' ',''),'-',''),9) from ILC_ConsolidadoDiario where fec_carga=@today and dia_atraso<=30 and f3 is not NULL and f3 not like '%ystem.Dat%'
    and f3 not like '%999999999%' and f3 not like '%11111111%' and f3!='' and len(f3)>6 group by dni,f3
    insert into #temp1(dni,fono) select right('00000000'+dni,8), right(replace(replace(f4,' ',''),'-',''),9) from ILC_ConsolidadoDiario where fec_carga=@today and dia_atraso<=30 and f4 is not NULL and f4 not like '%ystem.Dat%'
    and f4 not like '%999999999%' and f4 not like '%11111111%' and f4!='' and len(f4)>6 group by dni,f4
    insert into #temp1(dni,fono) select right('00000000'+dni,8), right(replace(replace(f5,' ',''),'-',''),9) from ILC_ConsolidadoDiario where fec_carga=@today and dia_atraso<=30 and f5 is not NULL and f5 not like '%ystem.Dat%'
    and f5 not like '%999999999%' and f5 not like '%11111111%' and f5!='' and len(f5)>6 group by dni,f5
    insert into #temp1(dni,fono) select right('00000000'+dni,8), right(replace(replace(f6,' ',''),'-',''),9) from ILC_ConsolidadoDiario where fec_carga=@today and dia_atraso<=30 and f6 is not NULL and f6 not like '%ystem.Dat%'
    and f6 not like '%999999999%' and f6 not like '%11111111%' and f6!='' and len(f6)>6 group by dni,f6
    insert into #temp1(dni,fono) select right('00000000'+dni,8), right(replace(replace(f7,' ',''),'-',''),9) from ILC_ConsolidadoDiario where fec_carga=@today and dia_atraso<=30 and f7 is not NULL and f7 not like '%ystem.Dat%'
    and f7 not like '%999999999%' and f7 not like '%11111111%' and f7!='' and len(f7)>6 group by dni,f7
    insert into #temp1(dni,fono) select right('00000000'+dni,8), right(replace(replace(f8,' ',''),'-',''),9) from ILC_ConsolidadoDiario where fec_carga=@today and dia_atraso<=30 and f8 is not NULL and f8 not like '%ystem.Dat%'
    and f8 not like '%999999999%' and f8 not like '%11111111%' and f8!='' and len(f8)>6 group by dni,f8
    select * from #temp1

    Que otro filtro le puedo incrementar para que solo me quede lo siguiente, ejemplo:

    ACTUAL:

             dni fono
    238577 968186739
    238577 968186739

    LO QUE NECESITO:

             dni fono
    238577 968186739

    Espero respuesta gracias

    jueves, 7 de septiembre de 2017 18:59

Respuestas

  • Intenta con la siguiente consulta:

    DECLARE @Today date = GETDATE();
    INSERT INTO #temp1(dni, fono)
    SELECT DISTINCT
        RIGHT('00000000' + dni, 8), RIGHT(REPLACE(REPLACE(t.f,' ', ''), '-', ''), 9)
    FROM  
        ILC_ConsolidadoDiario
        CROSS APPLY (SELECT f1 UNION SELECT f2 UNION SELECT f3 UNION SELECT f4 UNION 
    	   SELECT f5 UNION SELECT f6 UNION SELECT f7 UNION SELECT f8) t(f)
    WHERE 
        fec_carga = @Today AND dia_atraso <= 30 AND LEN(t.f) > 6 
        AND t.f NOT LIKE '%ystem.Dat%' AND t.f NOT LIKE '%999999999%' AND t.f NOT LIKE '%11111111%' 
    GROUP BY RIGHT('00000000' + dni, 8), RIGHT(REPLACE(REPLACE(t.f,' ', ''), '-', ''), 9)
    GO



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 7 de septiembre de 2017 21:55

Todas las respuestas

  • ¿Y no te bastaría con esto?:

    select distinct dni, fono from laTabla

    jueves, 7 de septiembre de 2017 19:29
  • Necesitas solo listar o elimarlas de tu bd? 

    Pasa los puntos prro v:

    jueves, 7 de septiembre de 2017 19:53
  • no nada no le sale con esa consulta :v
    jueves, 7 de septiembre de 2017 20:33
  • listar man.
    jueves, 7 de septiembre de 2017 20:34
  • Entonces usa distinct , pero deberías pensar por que tienes registros duplicados o tu select tiene duplicidad .Talves sea un error de query


    Pasa los puntos prro v:


    jueves, 7 de septiembre de 2017 20:35
  • Intenta con la siguiente consulta:

    DECLARE @Today date = GETDATE();
    INSERT INTO #temp1(dni, fono)
    SELECT DISTINCT
        RIGHT('00000000' + dni, 8), RIGHT(REPLACE(REPLACE(t.f,' ', ''), '-', ''), 9)
    FROM  
        ILC_ConsolidadoDiario
        CROSS APPLY (SELECT f1 UNION SELECT f2 UNION SELECT f3 UNION SELECT f4 UNION 
    	   SELECT f5 UNION SELECT f6 UNION SELECT f7 UNION SELECT f8) t(f)
    WHERE 
        fec_carga = @Today AND dia_atraso <= 30 AND LEN(t.f) > 6 
        AND t.f NOT LIKE '%ystem.Dat%' AND t.f NOT LIKE '%999999999%' AND t.f NOT LIKE '%11111111%' 
    GROUP BY RIGHT('00000000' + dni, 8), RIGHT(REPLACE(REPLACE(t.f,' ', ''), '-', ''), 9)
    GO



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 7 de septiembre de 2017 21:55