2013-04-10 2 views
0

В одном из моих приложений я хочу суммировать выражение case с помощью агрегатной функции.суммировать выражение 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. 

Пожалуйста, выясните мою проблему. Заранее спасибо

ответ

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 

но, вам действительно нужен СУММ? Я чувствую, как:

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

даст вам тот же результат, любой способ, за что внутренний запрос и внешний запрос всех групп по имени

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 
0

Вы пытаетесь сделать сумму (которая идет через несколько записей) от значений min и max, которые также проходят через записи. Вам нужно будет повторить запрос, когда вы сначала получите min/max, а затем выполните оператор суммы, проверяющий их.

Смежные вопросы