我想使用CASE语句创建另一个列,如果该组中只有一次Gold,则将该组中“类型”列的值设置为Gold。
我尝试将CASE语句与LAG和LEAD一起使用来检查Type ='Gold'中的上一行还是下一行,但是事实证明这是一个相当长的解决方案,我不知道我需要多少行使用LAG / LEAD进行检查。
这是数据示例:
Company Year Country Type
A 2018 US null
A 2018 US null
A 2019 US null
B 2018 AU Gold
B 2019 AU Black
B 2019 BR Gold
C 2019 FR Silver
C 2019 CA Silver
C 2019 DE Gold
预期输出:
Company Year Country Type
A 2018 US null
A 2018 US null
A 2019 US null
B 2018 AU Gold
B 2019 AU Gold
B 2019 BR Gold
C 2019 FR Gold
C 2019 CA Gold
C 2019 DE Gold
答案 0 :(得分:1)
您可以使用count
分析函数
SELECT company,year,country,CASE
WHEN COUNT(
CASE WHEN type = 'Gold' THEN 1
END ) OVER(PARTITION BY company) > 0 THEN 'Gold'
ELSE type
END AS type
FROM t;