2014-09-12 180 views
0

查詢:如何reolve對包含聚合或子查詢的表達式聚合函數

SELECT * FROM TRIALTABLE1 

輸出:

 PRODUCTNAME  PRICE 
     BMW   2000000 
     Yamaha R15  125000 
     Splendour Plus 60000 
     BMW   7000000 

查詢#2:

select * from TRIALTABLE2 

輸出:

 SRNO PRODUCTNAME 
     1  Splendour Plus 
     2  BMW 

如果我的查詢是靜態的

select 
    PRODUCTNAME, sum(CASE when PRODUCTNAME='BMW' then 10 else 0 END) as ID 
from TRIALTABLE1 
group by PRODUCTNAME 

它的作品。但如果我使用動態PRODUCTNAME寶馬,它會引發錯誤..

select 
    PRODUCTNAME, sum(CASE when PRODUCTNAME= (SELECT PRODUCTNAME FROM TRIALTABLE2 WHERE SRNO=2) then 10 else 0 END) as ID 
from TRIALTABLE1 
group by PRODUCTNAME 

錯誤:

Lookup Error - SQL Server Database Error: Cannot perform an aggregate function on an expression containing an aggregate or a subquery

我應該如何解決這個問題?

+0

無法讀取,請格式化以分離文本代碼 – Bulat 2014-09-12 11:40:29

回答

1

那麼,從你的例子看來,你只是需要一個左連接來避免子查詢?

select t1.productname, 
     sum (case when t2.srno= 2 then 10 else 0 end) as ID 
from trialtable1 t1 
left join trialtable2 t2 on t2.productname= t1.productname 
group by t1.productname 
+0

謝謝拉斐爾Althaus,它的工作..但我仍然沒有得到什麼問題呢? – SonalPM 2014-09-12 11:54:41

+0

@SonalPM,正如錯誤消息中所述,您無法在子查詢上執行SUM – 2014-09-12 12:10:38

1

作爲一個說明,你可以這樣寫查詢爲:

select distinct PRODUCTNAME, 
     (SELECT sum(case when srno = 2 then 10 else 0 end) 
     FROM TRIALTABLE2 t2 
     WHERE t2.PRODUCTNAME = t1.PRODUCTNAME 
     ) as ID 
from TRIALTABLE1; 

這是爲了強調,儘管你不能使用聚合函數裏面的子查詢,你可以使用子查詢內的聚合函數。

+0

正確,但結果未由此查詢分組在一起,它會爲PRODUCTNAME及其價格 – SonalPM 2014-09-12 12:55:18

+0

@SonalPM生成不同的條目。 。 。這確實假設'productid'在'trialtable1'中是獨一無二的,當我讀到這個問題時我認爲是真實的,但我錯過了寶馬的兩個價值觀。在任何情況下,所選答案都是正確的,但我想展示一種類似於原始方法的方法。 – 2014-09-12 13:28:35

+0

是的,謝謝Gordon Linoff .. – SonalPM 2014-09-15 04:55:43

相關問題