查询:
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数据库错误:无法对包含聚合或子查询的表达式执行聚合函数
我该如何解决这个问题?
答案 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;
这是为了强调尽管您不能在聚合函数中使用子查询,但您可以在子查询中使用聚合函数。