在我的一个应用程序中,我想用聚合函数求和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.
请弄清楚我的问题。 在此先感谢
答案 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语句检查它们。