组中所有记录的SQL设置值

时间:2019-08-04 06:15:39

标签: sql oracle group-by

我想使用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

1 个答案:

答案 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;

DEMO