根据同一列中的数据更新列

时间:2015-10-30 03:29:27

标签: sql oracle

我有一张OFFICE_HOURS表,其中包含办公室(现场)医生的工作时间数据。从源系统加载此表时,存在一些问题,并且数据加载不正确。
对于phy_id,site_id组合,小时应该相同(重复不重要。)所以我需要更新表,所以phy_id的第一行中的小时数,site_id组合应该用于更新具有相同phy_id,site_id组合的其余行。
实际和预期结果如下。请帮忙。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果你不介意任何时间

UPDATE OFFICE_HOURS o 
SET HOURS = (SELECT min(HOURS)
             FROM OFFICE_HOURS f 
             WHERE f.phy_id = o.phy_id
               and f.site_id = o.site_id
            )

如果你想要更复杂的东西,并有选择来处理所选的小时。

with office as (
    SELECT *, 
           row_number() over (partition by phy_id, site_id order by hours) as rn
    FROM OFFICE_HOURS
)
UPDATE office o 
SET hours = (SELECT HOURS 
             FROM office f 
             WHERE f.phy_id = o.phy_id
               and f.site_id = o.site_id
               and f.row_id = 1