Inserting data into tables

61 Views Asked by At

I'm writing a query to insert data from two sources. In these sources, sale_id is unique, but when inserting data, I'm experiencing infinite duplication in the SALE_SRC_ID. The value 2000000000 should only appear once in the table.

WITH src AS (
    SELECT DISTINCT
        SALE_ID,
        EVENT_DT::TIMESTAMP,
        CUSTOMER_ID,
        PRODUCT_NAME,
        ADDRESS,
        CHANNEL_ID,
        EMPLOYEE_ID,
        PAYMENT_METHOD,
        quantity::INT,
        price::NUMERIC,
        costs::NUMERIC,
        TRANSACTION_AMOUNT::NUMERIC,
        (price::NUMERIC - costs::NUMERIC) * quantity::INT AS REVENUE,
        DELIVERY_DATE::TIMESTAMP,
        'SA_SALES_CANADA' AS source_system,
        'SRC_CANADA' AS source_entity
    FROM SA_SALES_CANADA.SRC_SALES_CANADA

    UNION ALL

    SELECT DISTINCT
        SALE_ID,
        EVENT_DT::TIMESTAMP,
        CUSTOMER_ID,
        PRODUCT_NAME,
        ADDRESS,
        'n.a.' AS CHANNEL_ID,
        EMPLOYEE_ID,
        PAYMENT_METHOD,
        quantity::INT,
        price::NUMERIC,
        costs::NUMERIC,
        TRANSACTION_AMOUNT::NUMERIC,
        (price::NUMERIC - costs::NUMERIC) * quantity::INT AS REVENUE,
        DELIVERY_DATE::TIMESTAMP,
        'SA_SALES_USA' AS source_system,
        'SRC_USA' AS source_entity
    FROM SA_SALES_USA.SRC_SALES_USA
)
INSERT INTO bl_3nf.ce_sales(
    SALE_ID,
    SALE_SRC_ID,
    EVENT_DT,
    CUSTOMER_ID,
    PRODUCT_ID,
    ADDRESS_ID,
    CHANNEL_ID,
    EMPLOYEE_ID,
    PAYMENT_METHOD_ID,
    QUANTITY,
    PRICE,
    COSTS,
    TRANSACTION_AMOUNT,
    REVENUE,
    DELIVERY_DATE,
    INSERT_DT,
    UPDATE_DT,
    SOURCE_SYSTEM,
    SOURCE_ENTITY
)
SELECT
    nextval('BL_3NF.SE_CE_SALES'),
    COALESCE(SALE_ID, 'n.a.'),
    COALESCE(EVENT_DT, '1900-01-01'::TIMESTAMP),
    CUST.CUSTOMER_ID,
    PROD.PRODUCT_ID,
    ADDR.ADDRESS_ID,
    CH.CHANNEL_ID,
    em.EMPLOYEE_ID,
    pm.PAYMENT_METHOD_ID,
    COALESCE(quantity, -1),
    PRICE,
    COSTS,
    TRANSACTION_AMOUNT,
    REVENUE,
    COALESCE(DELIVERY_DATE, '1900-01-01'::TIMESTAMP),
    NOW(),
    NOW(),
    src.source_system,
    src.source_entity
FROM src
LEFT JOIN bl_3nf.ce_addresses addr ON src.address = addr.address_src_id
LEFT JOIN bl_3nf.ce_channels ch ON src.channel_id = ch.channel_src_id
LEFT JOIN bl_3nf.ce_employees em ON src.employee_id = em.employee_src_id
LEFT JOIN bl_3nf.ce_products prod ON src.product_NAME = prod.product_src_id
LEFT JOIN bl_3nf.ce_payment_methods pm ON src.PAYMENT_METHOD = pm.payment_method_src_id
LEFT JOIN BL_3NF.CE_CUSTOMERS_SDC cust ON src.customer_id = cust.customer_src_id
LIMIT 50;

enter image description here

Using DISTINCT doesn't solve the problem. How can I resolve this issue?

0

There are 0 best solutions below