您好我在mssql中有一个如下所示的查询:
select .,.,.,.,
CAST(ROUND(SUM((CASE WHEN Action.PersonId IN( 10274,9999) then Action.WorkMinutes else 0 END)/60.0),2)AS DECIMAL(8,1))
from Action
inner join ...
这有效,但现在我需要用以下内容替换IN(10274,9999)
:
IN(
select people.PersonId
from people
inner join TeamMember on TeamMember.PersonId = people.PersonId
where TeamMember.TeamId=83)
不幸的是,这给了:
无法对包含的表达式执行聚合函数 聚合或子查询。
我觉得有一个简单的解决办法,但我现在想不起来。 任何帮助将不胜感激。
答案 0 :(得分:1)
由于错误消息明确指出您无法在聚合函数中放置子查询。以下内容将作为SQL Server的解决方法:
select CAST(ROUND(SUM((x.y)/60.0),2)AS DECIMAL(8,1))
from Action
CROSS APPLY (SELECT CASE WHEN PersonId IN (select people.PersonId
from people
inner join TeamMember
on TeamMember.PersonId = people.PersonId
where TeamMember.TeamId=83)
THEN WorkMinutes else 0 END) x(y)