如何在sql developer中添加具有相同id的结果?

如何在sql developer中添加具有相同id的结果?,sql,oracle,Sql,Oracle,Oracle SQL开发人员: 我有一个数据集,有些ID不是唯一的。其中一些ID具有取消日期。我想将取消日期添加到具有相同ID的行中。 例如: 我想填补空白,当在同一产品有一个取消日期 应该是这样的: product ; cancellation; cancelled; a null 23-01-2019 b 12-01-2019 12-01-2019 c null null d

Oracle SQL开发人员: 我有一个数据集,有些ID不是唯一的。其中一些ID具有取消日期。我想将取消日期添加到具有相同ID的行中。 例如:

我想填补空白,当在同一产品有一个取消日期

应该是这样的:

product ; cancellation;   cancelled;

a          null           23-01-2019 
b          12-01-2019     12-01-2019 
c          null           null 
d          null           null 
a          23-01-2019     23-01-2019 
b          null           12-01-2019
ALTER TABLE your_first_table 
ADD cancelled DATE;

CREATE TABLE your_temp_table(PRODUCT, CANCELLATION)
AS
SELECT PRODUCT, CANCELLATION 
FROM your_first_table ;

UPDATE your_first_table A 
SET cancelled  = (SELECT CANCELATION 
                  FROM your_temp_table B 
                  WHERE B.PRODUCT  = A.PRODUCT 
                  AND A.CANCELLATION IS NOT NULL);
我不知道,请帮帮我。

你可以试试这个:

SELECT          prod.product,
                prod.cancellation,
                canc.cancellation AS cancelled
FROM            my_table prod
LEFT OUTER JOIN my_table canc
             ON prod.product = canc.product
            AND canc.cancellation IS NOT NULL;

您可以在
选择中使用窗口功能:

select t.*, max(cancellation) over (partition by product) as cancelled
from t;
如果要在查询中设置值,可以使用
update

update t
    set cancelled = (select max(t2.cancellation)
                     from t t2
                     where t2.product = t.product
                    )
    where exists (select 1
                  from t t2
                  where t2.product = t.product and
                        t2.cancellation is not null
                 );

如果我理解正确,我会这样做:

product ; cancellation;   cancelled;

a          null           23-01-2019 
b          12-01-2019     12-01-2019 
c          null           null 
d          null           null 
a          23-01-2019     23-01-2019 
b          null           12-01-2019
ALTER TABLE your_first_table 
ADD cancelled DATE;

CREATE TABLE your_temp_table(PRODUCT, CANCELLATION)
AS
SELECT PRODUCT, CANCELLATION 
FROM your_first_table ;

UPDATE your_first_table A 
SET cancelled  = (SELECT CANCELATION 
                  FROM your_temp_table B 
                  WHERE B.PRODUCT  = A.PRODUCT 
                  AND A.CANCELLATION IS NOT NULL);

您可以使用
MERGE
语句:

MERGE INTO TABLE2 T2
USING (SELECT PRODUCT, CANCELLATION FROM TABLE1 
       WHERE CANCELLATION IS NOT NULL) T1
ON (T2.PRODUCT = T1.PRODUCT)
WHEN MATCHED THEN
UPDATE SET 
T2.CANCELLED = T1.CANCELLATION;
干杯