Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:为分组变量创建if条件_Sql_Sql Server_Count_Case - Fatal编程技术网

SQL:为分组变量创建if条件

SQL:为分组变量创建if条件,sql,sql-server,count,case,Sql,Sql Server,Count,Case,我有一个有4列的表,需要创建一个新列,表示如果下一年的季度至少存在一个data='color',那么这个季度的所有值都更改为'color'。怎么做 您可以使用窗口功能: select t.*, min(data) over(partition by year, quarter) as new_column from mytable t 如果给定季度存在任何'no',则新列将为该季度的所有行获取值'no'。这是因为在字符串方面,'no'

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


您可以使用窗口功能:

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

如果给定季度存在任何
'no'
,则
新列
将为该季度的所有行获取值
'no'
。这是因为在字符串方面,
'no'
可以使用窗口函数:

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

如果给定季度存在任何
'no'
,则
新列
将为该季度的所有行获取值
'no'
。这是因为在字符串方面,
'no'

您可以使用条件并获得每个季度的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

您可以使用条件并获得每个季度的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

假设您的意思是“has
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)

假设您真正的意思是“has
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)

谢谢,但是如果字符串不是像yes/no这样的字符串,那么字符串是什么?我编辑了table@ErkoTru:因此,当至少有一个
时,您想要
无颜色
?是的,正是这样谢谢,但是如果字符串不是像yes/no那样的字符串呢?@ErkoTru:那么字符串是什么呢?我编辑了table@ErkoTru:因此,当至少有一个
时,您想要
无颜色
?是的,正是这样谢谢。我还用新字符串更新了一个表。现在有3个我已经更新了答案,请检查。谢谢。我还用新字符串更新了一个表。现在有3行我已经更新了答案,请检查。
数据
列中没有一行显示
颜色的示例。您的意思是
“是”
?在
数据列中,没有一行显示
颜色的示例。你的意思是“是”吗?