es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Muchas duplicaciones, causadas por una columna de números de teléfono. Necesito reducir las duplicaciones.

Ver consulta a continuación que devuelve aproximadamente 38 mil filas. Cuando se elimina la unión ‘phone’ y la columna, se reduce a las 15.5 mil filas correctas.

SELECT 
    tc.customer_no
    ,fdn.display_name_short             'name'
    ,tc.cont_amt
    ,tc.ref_no
    ,tc.cont_dt
    ,tc.cont_type
    ,tca.fyear
    ,(ISNULL(street1, 'none') + ' ' + ISNULL(city, 'none') + ' ' + ISNULL(state, 'none') 
        + ', ' + ISNULL(postal_code, 'none'))       'address'
    ,ISNULL(tp.phone, 'none')
    ,ISNULL(te.address, 'none')
FROM T_CONTRIBUTION                         tc
    JOIN FT_CONSTITUENT_DISPLAY_NAME()      fdn
        ON tc.customer_no = fdn.customer_no
    JOIN T_CAMPAIGN                         tca
        ON tc.campaign_no = tca.campaign_no
    LEFT JOIN T_ADDRESS                         ta
        ON tc.customer_no = ta.customer_no AND ta.primary_ind = 'y'
    LEFT JOIN T_EADDRESS                            te
        ON tc.customer_no = te.customer_no AND te.primary_ind = 'y'
    LEFT JOIN T_PHONE                           tp
        ON tc.customer_no = tp.customer_no
WHERE tca.fyear BETWEEN 2018 AND 2022
        AND tc.cont_amt > 0
        AND te.inactive = 'N'
        AND ta.inactive = 'N'

¿Algún consejo sobre cómo puedo incluir la columna de números de teléfono, eliminando la mayor cantidad de duplicados posible? No tengo que ser muy preciso con esta consulta, pero necesito reducir la cantidad de filas lo más posible. La tabla de teléfonos tiene alrededor de 50 tipos de teléfono diferentes (por ejemplo, 1, 2 o 22), y la clave primaria es el número de teléfono. La base de datos solo utiliza los tipos de teléfono 1 o 2, pero estoy buscando datos de los últimos 4 años, antes de que cambiaran a utilizar solo dos tipos de teléfono.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para incluir la columna de número de teléfono mientras se eliminan tantos duplicados como sea posible, puedes modificar la unión izquierda en la tabla T_PHONE para unir solo en el tipo de teléfono 1 o 2 utilizando la cláusula WHERE. Esto asegurará que solo se devuelva un número de teléfono para cada cliente, reduciendo el número de duplicados.

    Aquí está la consulta modificada:

    SELECT 
        tc.customer_no
        ,fdn.display_name_short 'name'
        ,tc.cont_amt
        ,tc.ref_no
        ,tc.cont_dt
        ,tc.cont_type
        ,tca.fyear
        ,(ISNULL(street1, 'none') + ' ' + ISNULL(city, 'none') + ' ' + ISNULL(state, 'none') 
            + ', ' + ISNULL(postal_code, 'none')) 'address'
        ,ISNULL(tp.phone, 'none')
        ,ISNULL(te.address, 'none')
    FROM T_CONTRIBUTION tc
    JOIN FT_CONSTITUENT_DISPLAY_NAME() fdn
        ON tc.customer_no = fdn.customer_no
    JOIN T_CAMPAIGN tca
        ON tc.campaign_no = tca.campaign_no
    LEFT JOIN T_ADDRESS ta
        ON tc.customer_no = ta.customer_no AND ta.primary_ind = 'y'
    LEFT JOIN T_EADDRESS te
        ON tc.customer_no = te.customer_no AND te.primary_ind = 'y'
    LEFT JOIN T_PHONE tp
        ON tc.customer_no = tp.customer_no AND tp.phone_type IN (1, 2) -- Solo unir en el tipo de teléfono 1 o 2
    WHERE tca.fyear BETWEEN 2018 AND 2022
        AND tc.cont_amt > 0
        AND te.inactive = 'N'
        AND ta.inactive = 'N'
    

    Al agregar AND tp.phone_type IN (1, 2) a la condición de unión izquierda en la tabla T_PHONE, la consulta solo devolverá un número de teléfono para cada cliente con un tipo de teléfono 1 o 2. Esto ayudará a reducir el número de duplicados y, por lo tanto, el número de filas.

Comments are closed.