将值设置为变量并根据条件SQL进行修改

Posted

技术标签:

【中文标题】将值设置为变量并根据条件SQL进行修改【英文标题】:Set value to variable and modify based on condition SQL 【发布时间】:2015-07-17 11:10:23 【问题描述】:

我有一个查询,我需要在其中声明一个变量并为其设置值。然后在基于其中一个列值 (max_val) 的 select 语句中,如果变量值超过 max_col 中的值,我将需要更改变量的值。基本查询如下所示:

Declare @variable int
Set @variable = x

select * from (
  select 
    *, 
    row_number () over (partition by account_id, product order by revenue desc) as rk 
  from (
    select * 
    from dataset
    where account_id = 'abc'
    and product = 'xyz'
    and @variable between min_val and max_val
  ) x 
) y
where y.rk =1;

在此查询中,如果@variable > max_val,则不会显示任何记录。但是,我想包含一个条件,即当上述条件匹配时,@variable 的值被分配为max_val

【问题讨论】:

在 SQL Server 中,不能在单个查询中既返回行又设置变量。 【参考方案1】:

你可以在第二行之后引入这个,把正确的值放入@variable

select @variable = case
                        when max(max_val) > @variable then @variable
                        else max(max_val)
                    end
from dataset
where account_id = 'abc'
and product = 'xyz'

【讨论】:

不确定我是否做错了,但查询仍然没有给我任何记录。如果我删除条件“和 min_val 和 max_val 之间的 @variable”,我会得到一条记录。理想情况下,在应用新条件的情况下,我应该得到相同的记录不过感谢您的快速回复! @Abhi 你能在查询执行前检查@variable 的值吗?这是你所期望的吗? @Wolf 抱歉,查询有效,但仅适用于产品列中的少数值。我想我需要检查一次其他列的属性并回复您。非常感谢您的帮助!!! 错字?您的案例条款不应该是case when max(max_val)<@variable then @variable else max(max_val) end吗? @cars10 我不这么认为:@variable 最终应该是between min_val and max_val。这意味着如果它小于最大值max_val,它可能应该保持它的值。

以上是关于将值设置为变量并根据条件SQL进行修改的主要内容,如果未能解决你的问题,请参考以下文章

如何将值设置为类的变量并显示它?

关于SQL多条件查询问题: 若其中一条件为空值如何设置忽略该条件而用其它条件组合查询??

将值从 SpinBox 设置为变量

将值保存在局部变量 HANA SQL 脚本中

根据状态变量进行条件 Yup 验证

JavaScript 将值设置为函数调用上的变量属性