Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
FastTI Member Откуда: Сообщений: 44 |
Доброго времени суток. Не могли бы вы мне помочь вот с каким делом:
выдает сообщение вида Cannot perform an aggregate function on an expression containing an aggregate or a subquery. получается что агрегатная функция sumне может обработать подзапрос (select sum(DATEDIFF(SS, (select END_START_SHIFT_IDENT from PLGOK_EQUIPMENT_STATUS_TRANS_GTC2 where END_TIMESTAMP = est2.START_TIMESTAMP and EQUIP_IDENT = est2.EQUIP_IDENT), START_TIMESTAMP) как можно сохранив логику все таки выполнить запрос? |
9 мар 16, 09:22 [18909704] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Сначала сделать нужную выборку, а потом уже считать агрегаты |
||
9 мар 16, 09:26 [18909714] Ответить | Цитировать Сообщить модератору |
FastTI Member Откуда: Сообщений: 44 |
Дело в том что этот подзапрос будет использоваться как подзапрос для более крупного запроса и не однократно. Это увеличивает обьем... Получается обойти другим образом не получиться? |
||
9 мар 16, 14:19 [18911300] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
если вы про то, что засунуть в агрегатную функцию запрос с еще одной агрегатной функцией, то да, обойти не получится Другой вопрос в том, зачем вам вообще понадобился этот запрос с еще одгим агрегатом |
||
9 мар 16, 14:51 [18911418] Ответить | Цитировать Сообщить модератору |
FastTI Member Откуда: Сообщений: 44 |
Ну это не работает если даже засунуть просто подзапрос в одну агрегатную и вместо THEN sum((select sum(DATEDIFF(SS, (select END_START_SHIFT_IDENT from PLGOK_EQUIPMENT_STATUS_TRANS_GTC2 where END_TIMESTAMP = est2.START_TIMESTAMP and EQUIP_IDENT = est2.EQUIP_IDENT), START_TIMESTAMP)) from PLGOK_EQUIPMENT_STATUS_TRANS_GTC2 est2 where est2.EQUIP_STATUS_REC_IDENT = est.EQUIP_STATUS_REC_IDENT))написать THEN (select sum(DATEDIFF(SS, (select END_START_SHIFT_IDENT from PLGOK_EQUIPMENT_STATUS_TRANS_GTC2 est2 where est2.END_TIMESTAMP = est.START_TIMESTAMP and EQUIP_IDENT = est2.EQUIP_IDENT), START_TIMESTAMP))) то есть просто невозможно это синтаксически реализовать?
ну вот я показал как я переделал с одним агрегатом... результат тот же Cannot perform an aggregate function on an expression containing an aggregate or a subquery. |
||||
9 мар 16, 15:36 [18911634] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вы про неизвестную нам задачу или про засовывание произвольного запроса в произвольные места других запросов, функций и выражений ? |
||
9 мар 16, 15:39 [18911654] Ответить | Цитировать Сообщить модератору |
FastTI Member Откуда: Сообщений: 44 |
)) все на своих местах. Я про засовывание подзапроса (соответвующего задаче) который возвращает время, в агрегатную функцию (sum в данном случае) |
||
9 мар 16, 15:45 [18911696] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Это для вас на своих. А у сервера свои понятия о правильных местах
А CASE типа не считаем - это же такая мелочь |
||||
9 мар 16, 15:50 [18911722] Ответить | Цитировать Сообщить модератору |
FastTI Member Откуда: Сообщений: 44 |
Мы наверное немного о разном... причем тут CASE? Студия ругается на то что нельзя запихнуть в агрегатную фунцию подзапрос. для каждого DATEDIFF своя агрегатная ф-ция CASE их перебирает в соответствии с условиями...
Скорее всего непонимание возникает из за этого. |
||||
9 мар 16, 17:35 [18912335] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Ну конечно не позволяет. Просто глупый сервер не может понять всю красоту вашей задумки. И вот и пишет разные "отмазки"
Вы почему считаете, что вы написали единстсвенно возможный вариант запроса для решения вашей задачи. Осталось только пару штрихов подправить - в правильном месте какой нибудь sum поставить |
||||||
9 мар 16, 17:44 [18912371] Ответить | Цитировать Сообщить модератору |
FastTI Member Откуда: Сообщений: 44 |
Glory,
Абсолютно не считаю. |
||
10 мар 16, 09:14 [18913745] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Тогда какого решения вы ждете в данной теме ? |
||
10 мар 16, 09:19 [18913769] Ответить | Цитировать Сообщить модератору |
FastTI Member Откуда: Сообщений: 44 |
Glory,
|
||
10 мар 16, 09:22 [18913784] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Да все просто - переписать запрос, сохранив логику. |
||||
10 мар 16, 09:27 [18913822] Ответить | Цитировать Сообщить модератору |
FastTI Member Откуда: Сообщений: 44 |
Glory,
Спасибо. Именно за этим советом я шел на форум |
||
10 мар 16, 09:31 [18913844] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Совет полностью соответствует заданному вами вопросу. Так что свои претензии адресуйте себе самому. |
||
10 мар 16, 09:33 [18913855] Ответить | Цитировать Сообщить модератору |
FastTI Member Откуда: Сообщений: 44 |
Glory,
Да нет у меня к вам претензий никаких)) |
||
10 мар 16, 14:24 [18915673] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |