2016-03-29 24 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 
相关问题