分组项目并设置标志
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
我有一个 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