如何解析包含聚合或子查询的表达式的聚合函数

时间:2014-09-12 11:39:04

标签: sql sql-server database group-by

查询:

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

错误:

  

查找错误 - SQL Server数据库错误:无法对包含聚合或子查询的表达式执行聚合函数

我该如何解决这个问题?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;

这是为了强调尽管您不能在聚合函数中使用子查询,但您可以在子查询中使用聚合函数。