2013-10-25 106 views
0

我們有一個很少有重複項的訂單表。但重複不完全重複。在SQLServer 2005中合併記錄並刪除重複內容

可以說我有一個訂單表:

CREATE TABLE orders 
    ( 
    order_id    INT, 
    order_number   INT, 
    customer_id   VARCHAR(34), 
    tb_register_no  INT, 
    tb_customer_id  VARCHAR(7), 
    tb_customer_no  VARCHAR(10), 
    tb_store_no   INT, 
    tb_trans_no   INT, 
    tb_trans_category_id VARCHAR(4), 
    sales_associate_no VARCHAR(5), 
    date_booked   VARCHAR(7) 
); 



INSERT INTO orders 
    (`order_id`, `Order_number`, `Customer_Id`, `tb_register_no`, `tb_customer_id`, `tb_customer_no`, `tb_store_no`, `tb_trans_no`, `tb_trans_category_id`, `sales_associate_no`, `date_booked`) 
VALUES 
    (1, 1001, NULL, 3, NULL, NULL, 235, 1001, '2', '52279', '00:00.0'), 
    (2, 1001, '0x331EFC0429A811E39742643150505996', 3, '3479899', '8883724945', 235, 1001, NULL, NULL, '00:00.0'), 
    (3, 1014, NULL, 2, NULL, NULL, 235, 1014, '2', '52275', '00:00.0'), 
    (4, 1014, '0x330E5A3429A811E39742643150505996', 2, '3479876', '8883722810', 235, 1014, NULL, NULL, '00:00.0') 
; 

,所以我需要對所有誰擁有相同order_number,tb_register_no,tb_store_no,tb_trans_no,date_booked的ORDRES一個訂單輸入。這意味着我需要將記錄與order_id 1和2合併爲一條記錄,並填寫其他記錄中的NULLs。我們應該怎麼做?

這將在SQLServer 2005中完成。合併這樣的行後,我需要刪除其他重複的ordres(如果我們將order_id 1合併到2,那麼order_id 1的行必須被刪除)。

+0

請勿將圖像發佈爲文本,而是將數據發佈爲文本。然後我們可以將它複製粘貼到[sql-fiddle](http://sqlfiddle.com/)。 –

回答

1

從你的方式描述它 - 我要說的東西沿着這條線:

UPDATE O 
    SET 
    Customer_Id = ISNULL(O.Customer_Id, O2.Customer_Id) 
    ...remainder fields... 
FROM dbo.orders AS O 
INNER JOIN dbo.orders AS O2 ON 
       o.Order_number = o2.Order_number 
       AND o.order_id <> o2.order_id 

這將更新順序,先不要空場。 然後你可以在之後刪除重複。

+0

你的回答對我完全有幫助。 – vchitta