2016-03-29 35 views
0

我有2個表:A和B兩個表相同的列:插入從父表中的非重複數據,以子表在SQL Server 2008

Customer_Part_Number, 
Lear_Part_Number, 
Shipping_ID, 
Customer_Name, 
Effective_Date, 
End_Date,Change_ID, 
PO_Number, 
PO_Price 

我已經成功的全部數據複製到表從表格中的 B,而當列的記錄我的情況:

TENANT_ID,   
CUSTOMER_PART_NUMBER,  
SHIPPING_ID,  
EFFECTIVE_DATE   

是表A一樣,我不希望它得到它插入到我已經使用查詢試圖表B. :

INSERT INTO OSUSR_1SV_QAD_PO_DATA 
    (TENANT_ID, 
    CUSTOMER_PART_NUMBER, 
    LEAR_PART_NUMBER, 
    SHIPPING_ID, 
    CUSTOMER_NAME, 
    PROGRAM_NAME, 
    EFFECTIVE_DATE, 
    END_DATE, 
    CHANGE_ID, 
    PO_NUMBER, 
    PO_PRICE) 
SELECT 
    TENANT_ID, 
    CUSTOMER_PART_NUMBER, 
    LEAR_PART_NUMBER, 
    SHIPPING_ID, 
    CUSTOMER_NAME, 
    PROGRAM_NAME, 
    EFFECTIVE_DATE, 
    END_DATE, 
    CHANGE_ID, 
    PO_NUMBER, 
    PO_PRICE 
FROM 
OSUSR_1SV_STAGING_FTP A 
WHERE 
not exists 
(SELECT TENANT_ID, 
    CUSTOMER_PART_NUMBER, 
    LEAR_PART_NUMBER, 
    SHIPPING_ID, 
    CUSTOMER_NAME, 
    PROGRAM_NAME, 
    EFFECTIVE_DATE, 
    END_DATE, 
    CHANGE_ID, 
    PO_NUMBER, 
    PO_PRICE 
    FROM OSUSR_1SV_QAD_PO_DATA B 
    WHERE 
     A.TENANT_ID = B.TENANT_ID 
     and A.CUSTOMER_PART_NUMBER = A.CUSTOMER_PART_NUMBER 
     and A.SHIPPING_ID = B.SHIPPING_ID 
     and A.EFFECTIVE_DATE = B.EFFECTIVE_DATE) 

這裏,如果列TENANT_ID,CUSTOMER_PART_NUMBER,SHIPPING_ID,EFFECTIVE_DATE的記錄相同,則不會插入重複記錄。

請幫助我。

enter image description here

在第一圖像上有表OSUSR_1SV_STAGING_FTP重複數據
TENANT_ID的基礎上,
CUSTOMER_PART_NUMBER,
SHIPPING_ID,
EFFECTIVE_DATE

但我需要插入的數據等表2上的圖像2 OSUSR_1SV_QAD_PO_DATA沒有重複 TENANT_ID,
CUSTOMER_PART _number,
SHIPPING_ID,
EFFECTIVE_DATE
enter image description here

我試圖此查詢
MERGE OSUSR_1SV_QAD_PO_DATA甲
USING OSUSR_1SV_STAGING_FTP乙
ON(B.TENANT_ID = A.TENANT_ID和B.CUSTOMER_PART_NUMBER = A.CUSTOMER_PART_NUMBER
and B.SHIPPING_ID = A.SHIPPING_ID and B.EFFECTIVE_DATE = A.EFFECTIVE_DATE)
什麼時候匹配
DELETE WHERE ID NOT IN(SELECT MIN(ID)_
FROM OSUSR_1SV_STAGING_FTP
GROUP BY CUSTOMER_PART_NUMBER,SHIPPING_ID)
WHEN NOT MATCHED THEN
INSERT(TENANT_ID,CUSTOMER_PART_NUMBER,LEAR_PART_NUMBER,SHIPPING_ID,CUSTOMER_NAME,PROGRAM_NAME,EFFECTIVE_DATE,結束日期, CHANGE_ID,PO_NUMBER,PO_PRICE)
VALUES(B.TENANT_ID,B.CUSTOMER_PART_NUMBER,B.LEAR_PART_NUMBER,B.SHIPPING_ID,
B.CUSTOMER_NAME,B.PROGRAM_NAME,B.EFFECTIVE_DATE,B.END_DATE,B.CHANGE_ID,B。 PO_NUMBER,B.PO_PRICE);

+0

爲什麼沒有你查詢的工作? –

回答

1

更換這部分

not exists 
(SELECT 1 
FROM OSUSR_1SV_QAD_PO_DATA B 
WHERE 
    A.TENANT_ID = B.TENANT_ID 
    --and A.CUSTOMER_PART_NUMBER = A.CUSTOMER_PART_NUMBER --you are Comparing same value here 
    and A.CUSTOMER_PART_NUMBER = B.CUSTOMER_PART_NUMBER 
    and A.SHIPPING_ID = B.SHIPPING_ID 
    and CAST(A.EFFECTIVE_DATE AS DATE) = CAST(B.EFFECTIVE_DATE AS DATE)) 
+0

它不工作..我得到的記錄包括複製記錄。 – Rains

+0

KINDLY看到編輯部分我已經完成..附加圖像 它不工作 – Rains

+0

@Rains你嘗試完全相同,我演示??。 –

0

嘗試此查詢:

 INSERT INTO OSUSR_1SV_QAD_PO_DATA 
(TENANT_ID, 
CUSTOMER_PART_NUMBER, 
LEAR_PART_NUMBER, 
SHIPPING_ID, 
CUSTOMER_NAME, 
PROGRAM_NAME, 
EFFECTIVE_DATE, 
END_DATE, 
CHANGE_ID, 
PO_NUMBER, 
PO_PRICE) 

Select TENANT_ID, 
CUSTOMER_PART_NUMBER, 
LEAR_PART_NUMBER, 
SHIPPING_ID, 
CUSTOMER_NAME, 
PROGRAM_NAME, 
EFFECTIVE_DATE, 
END_DATE, 
CHANGE_ID, 
PO_NUMBER, 
PO_PRICE 
from OSUSR_1SV_STAGING_FTP A 

INNER JOIN (select TENANT_ID,CUSTOMER_PART_NUMBER,SHIPPING_ID,EFFECTIVE_DATE from OSUSR_1SV_STAGING_FTP 
    group by TENANT_ID,CUSTOMER_PART_NUMBER,SHIPPING_ID,EFFECTIVE_DATE) as NoDuplicate ON A.TENANT_ID=NoDuplicate.TENANT_ID 
相關問題