2013-05-07 4 views
3

Время от времени я занимаюсь с SQL Server, и получаю ошибку, похожую на Can't use a window function on an aggregate. Это разочаровывает, потому что у меня есть SQL Server 2008, и я знаю, что 2012 дает лучшую функциональность оконной функции, и я использую их много. Тем не менее, время от времени я делаю что-то вродеФункции вложения в SQL Server

select me.patid 
     ,COUNT(*) as eligibilityGapsNo 
     ,COUNT(*) over(partition by count(*)) 
from memberEligibility as me 
group by me.patid 

, и это работает нормально. Я предполагаю, что это потому, что я уже группируюсь с помощью me.patid, но есть ли у кого-то более четкое представление о том, когда вы можете вложить такие функции окна?

ответ

2

Здесь вы не вложены функции окна. Вы встраиваете функцию агрегации count(*) с функцией окна count(*) over.

Вы можете встраивать функции агрегации в функции окна. И я это делаю. Тем не менее, я считаю его более четким, чтобы написать это как подзапрос, поскольку вложенные функции агрегирования просто «не смотреть прямо» мне:

select patid, eg, count(*) over (partition by egcnt) 
from (select me.patid, count(*) as egcnt 
     from memberEligibility me 
     group by me.patid 
    ) t 
+0

всегда приятно видеть, слышать чужую точку зрения – wootscootinboogie