案例与In,当GROUP BY时

时间:2015-05-07 07:17:18

标签: sql sql-server

您好我在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)

不幸的是,这给了:

  

无法对包含的表达式执行聚合函数   聚合或子查询。

我觉得有一个简单的解决办法,但我现在想不起来。 任何帮助将不胜感激。

1 个答案:

答案 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)