在一个SELECT with子句中设置多个标量变量

时间:2015-10-19 22:08:00

标签: sql sql-server

我的查询类似于以下格式:

select 
    @minValue = min(outerQuery.Consumption),
    @maxValue = max(outerQuery.Consumption),
    @avgValue = avg(outerQuery.Consumption),
    @userValue = (select value where id = '12345') -- <--Can this be done?
from 
    (select
         id, value
     from 
         complexInnerQuery) outerQuery

我正在尝试从我的子查询中设置min,max,avg值,同时还尝试根据我传入的id获取特定值。这在单个查询中是否可行?我的目标是避免为了性能而调用另一个函数来获取输出。

谢谢!

1 个答案:

答案 0 :(得分:1)

不是100%你打算传递id的方式,但是我会使用@jpw的建议并使用cte作为外​​部查询:

with outerQuery
as (
    select id
        ,value
    from complexInnerQuery
    )
select @minValue = min(outerQuery.Consumption)
    ,@maxValue = max(outerQuery.Consumption)
    ,@avgValue = avg(outerQuery.Consumption)
    ,@userValue = (
        select value
        from outerQuery
        where id = '12345'
        ) 
from outerQuery

或者,在@userValue的子查询中添加from子句可能会使您获得所需的位置:

select 
    @minValue = min(outerQuery.Consumption),
    @maxValue = max(outerQuery.Consumption),
    @avgValue = avg(outerQuery.Consumption),
    @userValue = (select value from outerQuery where id = '12345') -- <--Can this be done?
     from 
     (
         select
            id,
            value
         from 
            complexInnerQuery
    ) outerQuery

如果这没有帮助,请发布有关内部查询的更多信息以及您对@userValue所做的工作。