【问题标题】:Update column based on data in same column根据同一列中的数据更新列
【发布时间】:2015-10-30 11:50:45
【问题描述】:

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

【问题讨论】:

  • so the hours in the first row of a phy_id,site_id ... 你怎么知道哪一个是第一行?有row_iddate field 吗?现在两者完全相同
  • 其实没关系,任何一行都应该没问题。只是对于 phy_id、site_id 组合,小时数应该相同。
  • 那没有意义。这两个值怎么可能是正确的?
  • 问题是我只希望数据加载成功,因为这个问题而失败。由于它是源的问题,我不能说哪个是正确的数据,只需要用一些有效的数据更新它以通过数据加载。

标签: sql oracle


【解决方案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

【讨论】:

  • 对于第一个查询,我得到这个错误 SQL 错误:ORA-01747: invalid user.table.column, table.column, or column specification
猜你喜欢
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 2017-11-11
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
相关资源
最近更新 更多