Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 在SQLServer2005中合并记录并删除重复项_Sql Server 2005 - Fatal编程技术网

Sql server 2005 在SQLServer2005中合并记录并删除重复项

Sql server 2005 在SQLServer2005中合并记录并删除重复项,sql-server-2005,Sql Server 2005,我们有一张订单表,里面几乎没有副本。但这些重复项并不是完全重复的 假设我有一个订单表: CREATE TABLE orders ( order_id INT, order_number INT, customer_id VARCHAR(34), tb_register_no INT, tb_customer_id VARCHAR(7),

我们有一张订单表,里面几乎没有副本。但这些重复项并不是完全重复的

假设我有一个订单表:

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')
;
因此,我需要为具有相同
订单号、tb\u注册号、tb\u门店号、tb\u交易号、预订日期的所有订单输入一个订单条目
。这意味着我需要将顺序号为1和2的记录合并到一个记录中,并从另一个记录中填充
null
。我们怎样才能做到这一点


这将在SQLServer2005中完成。在像这样合并行之后,我需要删除其他重复的ordres(如果我们将order_id 1的行合并为2,那么必须删除order_id 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
更新O
设置
Customer\u Id=ISNULL(O.Customer\u Id,O2.Customer\u Id)
…剩余字段。。。
从dbo.orders作为O
内部连接dbo.orders为O2 ON
o、 订单号=o2.订单号
和o.订单号o2.订单号
这将更新订单,第一个字段为NOTNULL。
然后,您可以随后删除副本。

不要发布图像,而是将数据作为文本发布。然后我们可以复制粘贴到。你的答案对我很有帮助。