用聚合函数求和case表达式

时间:2013-04-10 05:48:43

标签: .net sql sql-server-2008

在我的一个应用程序中,我想用聚合函数求和case表达式。

我尝试了以下查询

Select Name,Sum(Case When MIN(arrival_time) = MAX(arrival_time) then 1 Else 0 End) as arrivedate from TableName group by Name

但是我收到了这样的错误。

Msg 130, Level 15, State 1, Line 1
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

请弄清楚我的问题。 在此先感谢

3 个答案:

答案 0 :(得分:4)

你不能在聚合函数中有聚合函数,这意味着你不能做

sum(min(..) )

尝试:

select Name,Sum(Val) as arrivedate 
from (
    SELECT name , (Case When MIN(arrival_time) = MAX(arrival_time) then 1 Else 0 END) Val
    FROM TableName
    group by Name
) x
group by Name

但是,你真的需要SUM吗?我觉得:

SELECT name , (Case When MIN(arrival_time) = MAX(arrival_time) then 1 Else 0 END) Val
FROM TableName
group by Name

将以任何方式给出相同的结果,因为内部查询和外部查询所有组在名称

答案 1 :(得分:1)

请尝试:

select 
    Name, 
    Sum(Case When MN = MX then 1 Else 0 End) arrivedate
from(
    select Name, Min(arrival_time) MN, max(arrival_time) MX From TableName
    group by Name
)x
group by Name

答案 2 :(得分:0)

您正尝试对记录中的最小值和最大值进行总和(跨越多个记录)。您需要重新查询最先获得最小值/最大值的查询,然后执行sum语句检查它们。