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

Откуда:
Сообщений: 44
Доброго времени суток. Не могли бы вы мне помочь вот с каким делом:

declare @date_start datetime, @date_end datetime, @shift varchar(3), @duration int

set @date_start = '2016-03-05'
set @date_end = '2016-03-06'
set @shift = '123'

select
EQUIP_IDENT,
STATUS_CODE,
START_SHIFT_IDENT,
START_TIMESTAMP,
END_TIMESTAMP,

CASE
WHEN START_SHIFT_IDENT = END_SHIFT_IDENT
THEN SUM(DATEDIFF(SS,START_TIMESTAMP,END_TIMESTAMP))
WHEN START_SHIFT_IDENT = @shift AND END_SHIFT_IDENT <> @shift
THEN SUM(DATEDIFF(SS, START_TIMESTAMP, END_START_SHIFT_IDENT))
WHEN START_SHIFT_IDENT <> @shift AND END_SHIFT_IDENT = @shift
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))
END as 'DURATION'

from PLGOK_EQUIPMENT_STATUS_TRANS_GTC2 est
where START_SHIFT_DATE between @date_start and @date_end
and @shift like '%'+START_SHIFT_IDENT+'%'

group BY EQUIP_IDENT,STATUS_CODE,START_SHIFT_IDENT, END_SHIFT_IDENT,END_TIMESTAMP,START_TIMESTAMP


выдает сообщение вида
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]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
FastTI
как можно сохранив логику все таки выполнить запрос?

Сначала сделать нужную выборку, а потом уже считать агрегаты
9 мар 16, 09:26    [18909714]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
FastTI
Member

Откуда:
Сообщений: 44
Glory
Сначала сделать нужную выборку, а потом уже считать агрегаты


Дело в том что этот подзапрос будет использоваться как подзапрос для более крупного запроса и не однократно. Это увеличивает обьем... Получается обойти другим образом не получиться?
9 мар 16, 14:19    [18911300]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
FastTI
Получается обойти другим образом не получиться?

если вы про то, что засунуть в агрегатную функцию запрос с еще одной агрегатной функцией, то да, обойти не получится
Другой вопрос в том, зачем вам вообще понадобился этот запрос с еще одгим агрегатом
9 мар 16, 14:51    [18911418]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
FastTI
Member

Откуда:
Сообщений: 44
Glory
если вы про то, что засунуть в агрегатную функцию запрос с еще одной агрегатной функцией, то да, обойти не получится


Ну это не работает если даже засунуть просто подзапрос в одну агрегатную и вместо
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)))

то есть просто невозможно это синтаксически реализовать?

Glory
Другой вопрос в том, зачем вам вообще понадобился этот запрос с еще одним агрегатом


ну вот я показал как я переделал с одним агрегатом... результат тот же
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
9 мар 16, 15:36    [18911634]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
FastTI
то есть просто невозможно это синтаксически реализовать?

Вы про неизвестную нам задачу или про засовывание произвольного запроса в произвольные места других запросов, функций и выражений ?
9 мар 16, 15:39    [18911654]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
FastTI
Member

Откуда:
Сообщений: 44
Glory
или про засовывание произвольного запроса в произвольные места других запросов, функций и выражений ?


)) все на своих местах. Я про засовывание подзапроса (соответвующего задаче) который возвращает время, в агрегатную функцию (sum в данном случае)
9 мар 16, 15:45    [18911696]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
FastTI
все на своих местах.

Это для вас на своих.
А у сервера свои понятия о правильных местах

FastTI
Я про засовывание подзапроса (соответвующего задаче) который возвращает время, в агрегатную функцию (sum в данном случае)

А CASE типа не считаем - это же такая мелочь
9 мар 16, 15:50    [18911722]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
FastTI
Member

Откуда:
Сообщений: 44
Glory
А CASE типа не считаем - это же такая мелочь

Мы наверное немного о разном... причем тут CASE? Студия ругается на то что нельзя запихнуть в агрегатную фунцию подзапрос. для каждого DATEDIFF своя агрегатная ф-ция CASE их перебирает в соответствии с условиями...


Glory
Вы про неизвестную нам задачу

Скорее всего непонимание возникает из за этого.
9 мар 16, 17:35    [18912335]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
FastTI
Мы наверное немного о разном... причем тут CASE? Студия ругается на то что нельзя запихнуть в агрегатную фунцию подзапрос. для каждого DATEDIFF своя агрегатная ф-ция CASE их перебирает в соответствии с условиями...

Ну конечно не позволяет.
Просто глупый сервер не может понять всю красоту вашей задумки.
И вот и пишет разные "отмазки"

FastTI
Glory
Вы про неизвестную нам задачу

Скорее всего непонимание возникает из за этого.

Вы почему считаете, что вы написали единстсвенно возможный вариант запроса для решения вашей задачи.
Осталось только пару штрихов подправить - в правильном месте какой нибудь sum поставить
9 мар 16, 17:44    [18912371]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
FastTI
Member

Откуда:
Сообщений: 44
Glory,
Glory
Вы почему считаете, что вы написали единстсвенно возможный вариант запроса для решения вашей задачи


Абсолютно не считаю.
10 мар 16, 09:14    [18913745]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
FastTI
Абсолютно не считаю.

Тогда какого решения вы ждете в данной теме ?
10 мар 16, 09:19    [18913769]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
FastTI
Member

Откуда:
Сообщений: 44
Glory,

автор
как можно сохранив логику все таки выполнить запрос?
10 мар 16, 09:22    [18913784]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
FastTI
Glory,

автор
как можно сохранив логику все таки выполнить запрос?

Да все просто - переписать запрос, сохранив логику.
10 мар 16, 09:27    [18913822]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
FastTI
Member

Откуда:
Сообщений: 44
Glory,
Glory
Да все просто - переписать запрос, сохранив логику.


Спасибо. Именно за этим советом я шел на форум
10 мар 16, 09:31    [18913844]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
FastTI
Спасибо. Именно за этим советом я шел на форум

Совет полностью соответствует заданному вами вопросу.
Так что свои претензии адресуйте себе самому.
10 мар 16, 09:33    [18913855]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка подзапроса  [new]
FastTI
Member

Откуда:
Сообщений: 44
Glory,
Glory
Так что свои претензии адресуйте себе самому

Да нет у меня к вам претензий никаких))
10 мар 16, 14:24    [18915673]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить