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

Откуда:
Сообщений: 110
Всем привет.

Подскаже, пжл, почему выходит ошибка?

select 
	sum([have_res])
from(
	select
              CASE 
                  WHEN SUM(CASE 
                                      WHEN CallResult IN (5,18) AND IdOperator != 'ab000000-0000-0000-0000-000000000000' 
                                      THEN 1 
                                      ELSE 0 
                                  END) > 0 
                  THEN 1 
                  ELSE 0  
              END 
        from dbo.A_Cube_CC_EffortConnections as ec
)


Сообщение 102, уровень 15, состояние 1, строка 15
Incorrect syntax near ')'.


Строка 15 это последняя скобка.
17 май 15, 20:15    [17652224]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Кролик-зануда
Guest
maksim.yugai,

добавьте алиас
17 май 15, 20:18    [17652230]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Кролик-зануда, так?

select 
	sum([have_res])
from(
	select
              CASE 
                  WHEN SUM(CASE 
                                      WHEN CallResult IN (5,18) AND IdOperator != 'ab000000-0000-0000-0000-000000000000' 
                                      THEN 1 
                                      ELSE 0 
                                  END) > 0 
                  THEN 1 
                  ELSE 0  
              END as have_res
        from oktell_cc_temp.dbo.A_Cube_CC_EffortConnections as ec
)


Не помогает.
17 май 15, 20:21    [17652245]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
maksim.yugai
Не помогает.
После скобки алиас.
17 май 15, 20:22    [17652247]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Кролик-зануда
Guest
maksim.yugai,
о,так у вас еще и там алиаса не было :)

я имел в виду то представление, из которого идет итоговая выборка
оно у вас никак не называется, на что вам сервер и намекает
17 май 15, 20:23    [17652251]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
alexeyvg
maksim.yugai
Не помогает.
После скобки алиас.


Спасибо. Да, уже разобрался. Вопрос решен.

Можно еще вопрос? Если у меня будет, например, 1000 строчек удовлетворяющих внутреннему case. Изменится ли сумма have_res?
17 май 15, 20:30    [17652271]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Кролик-зануда,

Нужно ли ставить SUM([have_res])?
17 май 15, 20:32    [17652281]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
maksim.yugai
Кролик-зануда,

Нужно ли ставить SUM([have_res])?


Не правильно поставил вопрос - Зачем нужно ставить SUM([have_res]), если значение всегда будет 1?
17 май 15, 20:36    [17652288]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Кролик-зануда
Guest
maksim.yugai,
ну так если не нужно - не ставьте.
кто вам запрещает?
точно не я
17 май 15, 20:57    [17652358]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Кролик-зануда
maksim.yugai,
ну так если не нужно - не ставьте.
кто вам запрещает?
точно не я


Нет, дело в том, что я пытаюсь разобрать этот кусок запроса. И мне не совсем понятно, в каком случае have_res будет >1? Зачем там функция sum(), если это значение будет всегда равно 1?
17 май 15, 22:21    [17652667]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Кролик-зануда
Guest
maksim.yugai,
если рассматривать представленный кусок кода - ни в каком не будет.
либо 0 будет, либо 1. даже null вроде как не может быть.

а зачем - вопрос к автору запроса.
17 май 15, 22:41    [17652751]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Кролик-зануда
maksim.yugai,
а зачем - вопрос к автору запроса.


Я бы тоже хотел у него спросить - да нет возможности. Но схема работает. Вообще, этот кусок кода от отчета..рабочего отчета. Вот весь селект:

SELECT IdCHAIN,
				DateStart,
				CASE WHEN SUM(CASE WHEN CallResult IN (5,18) AND IdOperator != 'ab000000-0000-0000-0000-000000000000' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END have_res,
				MIN(DateTimeStart) DateTimeStart,
				MAX(DateTimeStart) MAX_DateTimeStart,
				CASE WHEN SUM(CASE WHEN LEFT(BLineNum,2) NOT IN ('11','12','13','14') AND COALESCE(IdBUser,'ab000000-0000-0000-0000-000000000000') NOT IN ( 'ab000000-0000-0000-0000-000000000000','bf000000-0000-0000-0000-000000000000') AND  LenTime > 0 THEN 1 ELSE 0 END) > 1 THEN 1 ELSE 0 END passed_in,
				CASE WHEN SUM(CASE WHEN LEFT(BLineNum,2) IN ('11','12','13','14') AND LenTime > 0 THEN 1 ELSE 0 END ) > 0 THEN 1 ELSE 0 END passed_out,
				CASE WHEN SUM(CASE WHEN COALESCE(IdOperator,'ab000000-0000-0000-0000-000000000000') != 'ab000000-0000-0000-0000-000000000000' THEN 1 ELSE 0 END ) > 0 THEN 1 ELSE 0 END have_operator,
				CASE WHEN SUM(CASE WHEN CallResult IN (13) THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END missed,
				CASE WHEN SUM(CASE WHEN CallResult IN (21,22,25,26,27) THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END block_b,
				CASE WHEN SUM(CASE WHEN CallResult IN (23) THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END not_between_work_time,
				CASE WHEN SUM(CASE WHEN CallResult IN (7) THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END operator_missed,
				CASE WHEN SUM(CASE WHEN CallResult = 1 THEN 1 ELSE 0 END)  > 0 THEN 1 ELSE 0 END cr1,
				MAX(LenQueue) p_LenQueue
			FROM  dbo.A_Cube_CC_EffortConnections c
			WHERE convert(varchar(20),DateTimeStart,102) >= convert(varchar(20),@dt1,102)
				AND convert(varchar(20),DateTimeStart,102) <= convert(varchar(20),@dt2,102)
				AND convert(varchar(20),DateTimeStart,108) >= convert(varchar(20),@t1,108)
				AND convert(varchar(20),DateTimeStart,108) <= convert(varchar(20),@t2,108)
				--AND (NOT EXISTS(SELECT 1 FROM @task) OR EXISTS(SELECT 1 FROM @task sub_b WHERE sub_b.id = c.IdTask))
				AND IdCHAIN IS NOT NULL
				AND COALESCE(IsOutput,0) = 0
            GROUP BY IdCHAIN, DateStart


Над этим селектом, есть еще 2 селекта.
18 май 15, 08:49    [17653500]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
И вот в следующем селекте выполняется функция: SUM(have_res) + SUM(missed) и т.д.

Могу выслать следующий селект, если хотите..
18 май 15, 08:51    [17653513]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
convert(varchar(20),DateTimeStart,102) >= convert(varchar(20),@dt1,102)
				AND convert(varchar(20),DateTimeStart,102) <= convert(varchar(20),@dt2,102)
				AND convert(varchar(20),DateTimeStart,108) >= convert(varchar(20),@t1,108)
				AND convert(varchar(20),DateTimeStart,108) <= convert(varchar(20),@t2,108)

А вот эта вся фигня для того, чтобы серверу жизнь затруднить ?
18 май 15, 08:59    [17653550]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Кролик-зануда
Guest
maksim.yugai
Могу выслать следующий селект, если хотите..

вопрос-то ваш в чем?
если все еще "зачем?", то он скорее в философской плоскости.
18 май 15, 09:09    [17653600]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Glory
maksim.yugai
convert(varchar(20),DateTimeStart,102) >= convert(varchar(20),@dt1,102)
				AND convert(varchar(20),DateTimeStart,102) <= convert(varchar(20),@dt2,102)
				AND convert(varchar(20),DateTimeStart,108) >= convert(varchar(20),@t1,108)
				AND convert(varchar(20),DateTimeStart,108) <= convert(varchar(20),@t2,108)

А вот эта вся фигня для того, чтобы серверу жизнь затруднить ?


Нет, просто нужно конвертировать тип из datetime в varchar вида 102 и 108. А как по-другому?
18 май 15, 10:21    [17653991]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
Нет, просто нужно конвертировать тип из datetime в varchar вида 102 и 108. А как по-другому?

Зачем для сравнения двух datetime-ом их нужно конвертировать в varchar ?
Вы не умеет сравнивать ничего, кроме varchar-ов ?
18 май 15, 10:25    [17654024]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Кролик-зануда
maksim.yugai
Могу выслать следующий селект, если хотите..

вопрос-то ваш в чем?
если все еще "зачем?", то он скорее в философской плоскости.


Скорее не зачем, а как работает функция SUM().

Можете сказать, правильно ли я понимаю, что функция SUM() суммирует входящие в нее аргументы. Например, у меня 10 строчек, где внутренний case в алиасе have_res, в каждой из 10 строчек, равно 1. Тогда SUM(have_res) будет равна 10 или 1?
18 май 15, 10:34    [17654096]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
Кролик-зануда
Guest
maksim.yugai,

если вы хотите узнать,как работает функция SUM - почитайте хелп.

ответы для первого и последнего представленного вами запроса(если последний - это подзапрос, во внешнем запросе которого происходит суммирование) будут принципиально разными.
18 май 15, 10:48    [17654187]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в запросе  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Всем спасибо. Помогли.
18 май 15, 12:33    [17654814]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить