2015-10-19 86 views
0

我有類似於以下格式的查詢:設置多個標量變量在一個SELECT子句與

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 

我想從我的子查詢集合最小值,最大值,平均值,同時還試圖讓基於我傳入的id的特定值。這是可以在單個查詢中執行嗎?我的目標是避免調用另一個函數爲了性能而獲得那個輸出。

謝謝!

+0

你的代碼對我來說看起來很合理。你試過了嗎? –

+0

包含' - < - '的行似乎缺少from子句,或者您需要將外部查詢之後的位置移動到該位置。 ()的也是關閉的。 – xQbert

+0

我不認爲你可以這樣做;它應該給你一個錯誤,因爲id和value需要在group by子句中。 – jpw

回答

1

不是100%,你打算如何在id通過,但我會通過@jpw與建議去,並使用熱膨脹係數爲外部查詢:

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 

選擇,來自條款加入到

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一些更多的信息:你需要成爲您@userValue子查詢可能會得到你。

+0

感謝您的幫助。我在避免CTE,因爲它們降低了我的案例中的查詢性能。至於第二種方法,我可以驗證它不起作用。使用outerQuery來派生userValue會導致「無效的對象名稱」。話雖如此,CTE確實起作用,並且看起來好像我正在嘗試做的事情,它在語法上看起來不是另一種方式。標記爲答案。 :) – RizJa

+0

@RizJa如果您認爲cte降級查詢,請嘗試使用臨時表替換agileMikes第一個代碼塊中的cte。例如。 'select id,value from complexInnerQuery'中的#tmptable。 – g2server

+0

如果您確實將數據集放入臨時表中,則g2server會提示您似乎可以在您的from子句中使用該子查詢來設置@userValue以及您的主查詢並完全避免cte。 – agileMike