在删除双联记录之前将2个双联记录合并在一起

时间:2018-01-22 15:43:53

标签: sql database tsql

我的数据库中有一个表,其中包含productinstances。表名为productinstance,列id, imei, invoicedate, invoiceNo, serialNr, debitStartDate

在这个表中,大约有68个实例有一个doublet(相同的imei nr)。我想删除双峰。
问题是我在原始记录中需要双重信息,所以在删除双联之前我想将两个记录合并在一起。

所有原始记录invoiceNoinvoicedate均为null,并且所有双重serialno都有空值。

所以我想从dublet post中将invoiceNoinvoicedate的值合并到原始记录中,然后删除doublet。

这可能吗?如果是的话怎么样?

2 个答案:

答案 0 :(得分:0)

不太确定下面是你在寻找什么,你最好提供一些exmaples,但如果是,这是实现的方法之一:为派生字段添加一个额外的列。

ALTER TABLE productinstance
ADD ExtraColumn as ISNULL(invoiceNo,'') + ISNULL(CAST(invoicedate) as VARCHAR(50),'')

然后,您可以根据合并列删除任何记录。

答案 1 :(得分:0)

一种简单的方法是使用自连接作为update语句,使用另一个自联接作为delete语句:

UPDATE t0
SET invoiceNo = t1.invoiceNo,
    invoicedate = t1.invoicedate
FROM productinstance t0
INNER JOIN productinstance t1 ON t0.imei = t1.imei
WHERE t0.invoiceNo IS NULL
AND t0.invoicedate IS NULL
AND t1.invoiceNo IS NOT NULL
AND t1.invoicedate IS NOT NULL


DELETE t0
FROM productinstance t0
INNER JOIN productinstance t1 ON t0.imei = t1.imei
                             AND t0.invoiceNo = t1.invoiceNo
                             AND t0.invoicedate = t1.invoicedate
AND t0.serialno IS NULL