Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 считаю среднее значение, а пишут, что поле, по которому считаю, не в агрегатной функции  [new]
xx-xx
Guest
помогите, пожалуйста.
у меня маразм какой-то,
получаю ошибку, что поле, по которому беру среднее, не в агрегатной функции.
при этом MS выделяет прямо-таки строку с avg.

SELECT
  new_flussoidname,
  'Sett. n.' + cast( ( DATEDIFF(DAY,0, new_startdate)/7-
DATEDIFF(DAY,0, DATEADD(MONTH, DATEDIFF(MONTH,0,new_startdate),0))/7+1 ) as varchar(1)),
  max(new_durata) over 
  (partition by new_flussoidname, 
  Year ( new_startdate)*10000+
  Month ( new_startdate)*100+
  ( DATEDIFF(DAY,0, new_startdate)/7-
DATEDIFF(DAY,0, DATEADD(MONTH, DATEDIFF(MONTH,0,new_startdate),0))/7+1 )),
  avg(new_durata*1.0) over (partition by new_flussoidname, Year ( new_startdate)*10000+Month ( new_startdate)*100+( DATEDIFF(DAY,0, new_startdate)/7-
DATEDIFF(DAY,0, DATEADD(MONTH, DATEDIFF(MONTH,0,new_startdate),0))/7+1 )),
  Year ( new_startdate)*10000+Month ( new_startdate)*100+( DATEDIFF(DAY,0, new_startdate)/7-
DATEDIFF(DAY,0, DATEADD(MONTH, DATEDIFF(MONTH,0,new_startdate),0))/7+1 ),
  avg(new_durata*1.0) over (partition by new_flussoidname),
  avg(new_durata*1.0) over ()
FROM
  GSEContact_MSCRM.dbo.FilteredNew_chiamataivr
WHERE
new_startdate between '20110701' and '20110704'
  AND  ( new_tipochiamata = 1  )
GROUP BY
  new_flussoidname, 
  'Sett. n.' + cast( ( DATEDIFF(DAY,0, new_startdate)/7-
DATEDIFF(DAY,0, DATEADD(MONTH, DATEDIFF(MONTH,0,new_startdate),0))/7+1 ) as varchar(1)), 
  Year ( new_startdate)*10000+Month ( new_startdate)*100+( DATEDIFF(DAY,0, new_startdate)/7-
DATEDIFF(DAY,0, DATEADD(MONTH, DATEDIFF(MONTH,0,new_startdate),0))/7+1 )

Msg 8120, Level 16, State 1, Line 5
Column 'GSEContact_MSCRM.dbo.FilteredNew_chiamataivr.new_durata' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
24 июл 11, 18:33    [11019765]     Ответить | Цитировать Сообщить модератору
 Re: считаю среднее значение, а пишут, что поле, по которому считаю, не в агрегатной функции  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
xx-xx,

GROUP BY запроса не имеет никакого отношения к оконным агрегатным функциям,
например, MAX(new_durata) OVER(PRTITION BY ...)
Вся эта оконная функция с точки зрения GROUP BY - неагрегатное поле запроса.
Так что север прав!
24 июл 11, 18:41    [11019795]     Ответить | Цитировать Сообщить модератору
 Re: считаю среднее значение, а пишут, что поле, по которому считаю, не в агрегатной функции  [new]
xx-xx
Guest
iap,
понимаете, проблема в том, что этот запрос генерит автоматически BO
(Business objects).
я ему убирала насильно GROUP BY,
тогда считает.
но по идее, надо чтоб он сам автоматически генерил, а он почему-то собирает еще GROUP BY,
куда пихает все измерения(ну т.е. те, что не факты, где нет агрегатных функций)
т.е. как видит MAX и AVG,
сразу считает, что надо написать GROUP BY,
куда и кладет все, что без MAX и AVG.
есть ли из этого всего какой-то выход?
24 июл 11, 18:48    [11019821]     Ответить | Цитировать Сообщить модератору
 Re: считаю среднее значение, а пишут, что поле, по которому считаю, не в агрегатной функции  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
xx-xx
есть ли из этого всего какой-то выход?
Поправить BO, как же иначе? Если BO генерит неправильные запросы, что ещё можно сделать.
24 июл 11, 18:51    [11019836]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить