基于子行的SQL行中的条件更新

基于子行的SQL行中的条件更新,sql,tsql,Sql,Tsql,我正在寻找一种基于父行的子行有条件地更新父行的方法 身份证件 工作 经核准的 01 1 02 1.1 对 03 1.2 对 04 1.3 对 05 2 06 2.1 对 07 2.2 不 如果我解释数据,以便: 父作业以0结尾 所有的孩子都有相同的初始数字 层次结构只有一个级别 这份工作是一个数字 那么一种方法是: with toupdate as ( select t.*, count(*) over (partition by floor(job)) -

我正在寻找一种基于父行的子行有条件地更新父行的方法

身份证件 工作 经核准的 01 1 02 1.1 对 03 1.2 对 04 1.3 对 05 2 06 2.1 对 07 2.2 不
如果我解释数据,以便:

父作业以0结尾 所有的孩子都有相同的初始数字 层次结构只有一个级别 这份工作是一个数字 那么一种方法是:

with toupdate as (
      select t.*,
             count(*) over (partition by floor(job)) - 1 as num_children,
             sum(case when approved = 'yes' and job <> floor(job) then 1 else 0 end) over (partition by floor(job)) as num_yeses
      from t
     )
update toupdate
    set approved = 'yes'
    where num_yeses = num_children and
          floor(job) = job;

从您的数据来看,已批准的作业的“是”行数始终比每个作业的行数少1,因此

update T set approved='yes'
from (
    select Floor(job) Id
    from T
    group by Floor(job) having Count(*)-1=Sum(case when approved='yes' then 1 else 0 end)
)u join T on T.id=u.Id

你怎么知道父母和孩子的关系是什么?请阅读一些关于改进你的问题的提示。