将值设置为变量并根据条件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进行修改的主要内容,如果未能解决你的问题,请参考以下文章