分组项目并设置标志

Grouping items and setting a flag

我有一个 table 结构如下:

order_yr    acct_id indv_id age
2019        323     01      38
2019        323     02      37
2019        323     03      16
2019        323     04      5
2019        325     01      38
2019        326     01      64
2019        326     02      63

我需要做的是 order_yr 和 acct_id 如果 order_yr 和 acct_id 有年龄 <=17 的人添加一个标志。

结果是这样的:

order_yr    acct_id indv_id age child_flg
2019        323     01      38  1
2019        323     02      37  1
2019        323     03      16  1
2019        323     04      5   1
2019        325     01      38  0
2019        326     01      64  0
2019        326     02      63  0

我知道我必须按 order_yr 和 acct_id 进行分区,但不确定如何在一个内联脚本中获得结果。

如有任何帮助,我们将不胜感激。

顺便说一句,这是一个单独的级别提取物,每个 indv 都有许多其他列。

我还没走多远 - 我有这个:

,ROW_NUMBER() OVER(PARTITION BY order_yr, acct_id ORDER BY (CASE WHEN age <=17 THEN 'Y' ELSE 'N' END) desc) AS CHILD_flg

您在这里有一些选择。一种是使用子查询来查找是否存在属于某个组并满足您的条件的行:

select * 
     , case
         when exists (select * 
                        from #data sub
                       where sub.order_yr = d.order_yr
                         and sub.acct_id = d.acct_id
                         and sub.age <= 17)
         then 1
         else 0
       end as flag
  from #data d
  

您也可以像您计划的那样使用 window 函数:

 select * 
      , max(case when age <= 17 then 1 else 0 end) over (partition by order_yr, acct_id) as flag
  from #data d

Working demo on dbfiddle