2013-08-30 130 views
0

您好,我有兩個疑問這樣SQL使用子查詢

select COUNT(*)as Num_Occ, trial 
into ##temp_occ 
from [E1].[dbo].[EVENT_SIM] 
where MODELING_ID=1 
group by trial,MODELING_ID 
order by TRIAL 

select Num_Occ, count(*)as Num_Trials 
from ##temp_occ 
group by Num_Occ ORDER BY Num_Occ 

我不希望創建臨時表做這一切的時候合併查詢,所以我使用子查詢將二者結合起來。但是,我的代碼返回錯誤,說無效名稱Num_Occ。

select Num_Occ, count(*)as Num_Trials 
from [E1].[dbo].[EVENT_SIM] 
where NUM_Occ in (select COUNT(*)as Num_Occ 
from [E1].[dbo].[EVENT_SIM] 
where MODELING_ID=1) 

你能幫我理解我應該改變的地方嗎?非常感謝你!

+0

如果你可以發佈表格模式,並且對目標和你想要達到的目標稍作解釋,那會更好。 – Rijul

回答

0

這裏是將它們結合起來的方式:你想把子查詢from條款不where子句中

select Num_Occ, count(*) as Num_Trials 
from (select COUNT(*) as Num_Occ, trial 
     from [E1].[dbo].[EVENT_SIM] 
     where MODELING_ID = 1 
     group by trial, MODELING_ID 
    ) t 
group by Num_Occ 
ORDER BY Num_Occ; 

0

兩個查詢可以組合:

select Num_Occ, count(*)as Num_Trials 
from (

select COUNT(*)as Num_Occ, trial 
from [E1].[dbo].[EVENT_SIM] 
where MODELING_ID=1 
group by trial,MODELING_ID 


) as temptable 
group by Num_Occ ORDER BY Num_Occ 

但子查詢可能會導致非最佳的查詢計劃。