【问题标题】:SQL: create if condition for grouped variablesSQL:为分组变量创建 if 条件
【发布时间】:2021-04-02 00:34:11
【问题描述】:

我有一个有 4 列的表,需要创建一个新列,表示如果下一年的季度至少存在一个 data='colour',那么对于这个季度,所有值都更改为 'color.怎么做?

【问题讨论】:

  • 您的所有行都没有在data 列中显示'colour' 的示例。你的意思是'yes'

标签: sql sql-server count case


【解决方案1】:

您可以使用条件并获取每个季度的 no 计数,如下所示:

select t.*, 
       case when count(case when data = 'no' then 1 end) 
                  over (partition by year, quarter) > 0 
            then 'nocolour' 
            else data 
       end as new_column
from your_table t

【讨论】:

  • 谢谢。我还用新字符串更新了一个表。现在有3个
【解决方案2】:

你可以使用窗口函数:

select t.*,
    min(data) over(partition by year, quarter) as new_column
from mytable t

如果给定季度有任何'no',则new_column 为该季度的所有行取值'no'。这是有效的,因为在字符串方面,'no' < 'yes'

【讨论】:

  • 谢谢,但如果字符串不是像 yes/no 这样的字符串明智的?
  • @ErkoTru:那么字符串是什么?
  • @ErkoTru:所以当至少有一个no 时,你想要no colour
  • 是的,正是这个
【解决方案3】:

假设您的真正意思是“有data = 'yes'下一个季度,并且您想更新表格,您可以使用:

update t
    set newcolumn = (case when next_max_data = 'yes' then 'colour' else 'no colour')
    from t join
         (select year, quarter, 
                 lead(max(data)) over (order by year, quarter) as next_max_data
          from t
          group by year, quarter
         ) tt
         on t.year = tt.year and t.quater = tt.quarter;

如果您想要一年后的季度,您可以在子查询中使用lead(max(data), 4)

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 2017-11-22
    • 2014-06-30
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 2020-11-02
    相关资源
    最近更新 更多