powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Грабли с coalesce
7 сообщений из 7, страница 1 из 1
Грабли с coalesce
    #35236772
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select @@version
Adaptive Server Enterprise/15.0.2/EBF 14332/P/NT (IX86)/Windows 2000/ase1502/2486/32-bit/OPT/Thu May 24 04:10:36 2007


Код: plaintext
1.
2.
3.
4.
5.
6.
select
   T1.Field1,
   T2.Field2
from
   Table1 T1
   join Table2 T2 on (T2.KeyField=T1.KeyField)
отрабатывает нормально (возвращает N rows)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select
   T1.Field1,
   T2.Field2,
   coalesce(T1.Field1,T2.Field2)
from
   Table1 T1
   join Table2 T2 on (T2.KeyField=T1.KeyField)
не возвращает ничего (0 rows)

Посоветовали привести к одному типу
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select
   T1.Field1,
   T2.Field2,
   coalesce(cast(T1.Field1 as numeric( 18 , 0 )),cast(T2.Field2 as numeric( 18 , 0 )))
from
   Table1 T1
   join Table2 T2 on (T2.KeyField=T1.KeyField)
аналогично (0 rows)

Что делатЪ? Кто виноватЪ?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Грабли с coalesce
    #35236900
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обалдеть!!! Ж8-/ Вставил в isql ПЕРЕД возвращающим нулевой рекордсет select'ом (2), другой select и этот 2-й select - вернул все как положенно. Глюк 15-ки?

P.S. Выше приведенный пример - утрирован. На самом деле все гораздо сложнее и побольше. Однако замечено: coalesce корректно работает до определенного предела.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Грабли с coalesce
    #35236910
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.P.S. Если coalesce заменить на case || isnull - они тоже не выполняются, если идут первыми.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Грабли с coalesce
    #35237172
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.P.S. На
select @@version
Adaptive Server Enterprise/12.5.3/EBF 12875 ESD#4/P/NT (IX86)/OS 4.0/ase1253/1/32-bit/OPT/Thu Sep 08 11:27:35 2005

все oB! при любых раскладах (coalesce/case/isnull) и в любой последовательности. Значит, все-таки, - баг в 15-ке... :(
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Грабли с coalesce
    #35237617
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мой сервер:
select @@versionAdaptive Server Enterprise/15.0.2/EBF 14332/P/NT (IX86)/Windows 2000/ase1502/2486/32-bit/OPT/Thu May 24 04:10:36 2007

Код: plaintext
1.
select a.comp_id,b.adl_x,coalesce(a.comp_id,b.adl_x) from 
automation a join adl b on (a.ato_id=b.adl_id)

Нормально работает. возвращает N записей.
...
Рейтинг: 0 / 0
Грабли с coalesce
    #35237654
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry
Код: plaintext
1.
2.
select a.comp_id,b.adl_x,coalesce(a.comp_id,b.adl_x) from
automation a join adl b on (a.ato_id=b.adl_id)
Нормально работает. возвращает N записей.

Ex_Soft
Выше приведенный пример - утрирован. На самом деле все гораздо сложнее и побольше. Однако замечено: coalesce корректно работает до определенного предела.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
select
C.CONTRACT_ID,
coalesce(CA.COMMISSION_TYPE,IAP.AGENT_COMMISSION_TYPE) as COMMISSION_TYPE,
coalesce(CT1.CONTRACT_PARAM_NAME,CT2.CONTRACT_PARAM_NAME) as COMMISSION_TYPE_NAME,
case CA.COMMISSION_TYPE
   when  0  then CA.COMMISSION_VALUE
   when  1  then CA.COMMISSION_SUM
   else IAP.AGENT_COMMISSION
end as AGENT_COMMISSION
from
CONTRACT C
join CONTRACT_AGENTS CA on (CA.CONTRACT_ID=C.CONTRACT_ID)
join COMIS_TYPE CT1 on (CT1.CONTRACT_PARAM_ID=CA.COMMISSION_TYPE)
join INSURANCE_AGENTS IA on (IA.AGENT_ID=CA.AGENT_ID)
join INSURANCE_AGENTS_PARAM IAP on (IAP.AGENT_MASTER_INTERNAL_ID=IA.AGENT_INTERNAL_ID)
join COMIS_TYPE CT2 on (CT2.CONTRACT_PARAM_ID=IAP.AGENT_COMMISSION_TYPE)
where
(C.RECORD_STATE= 100 )
and (CA.RECORD_STATE= 100 )
and (CT1.RECORD_STATE= 100 )
and (IA.RECORD_STATE= 100 )
and (IAP.RECORD_STATE= 100 )
and (CT2.RECORD_STATE= 100 )
работает
Но стоит добавить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
select
C.CONTRACT_ID,
CA.AGENT_ID,
coalesce(CA.COMMISSION_TYPE,IAP.AGENT_COMMISSION_TYPE) as COMMISSION_TYPE,
coalesce(CT1.CONTRACT_PARAM_NAME,CT2.CONTRACT_PARAM_NAME) as COMMISSION_TYPE_NAME,
case CA.COMMISSION_TYPE
   when  0  then CA.COMMISSION_VALUE
   when  1  then CA.COMMISSION_SUM
   else IAP.AGENT_COMMISSION
end as AGENT_COMMISSION
from
CONTRACT C
join CONTRACT_AGENTS CA on (CA.CONTRACT_ID=C.CONTRACT_ID)
join COMIS_TYPE CT1 on (CT1.CONTRACT_PARAM_ID=CA.COMMISSION_TYPE)
join INSURANCE_AGENTS IA on (IA.AGENT_ID=CA.AGENT_ID)
join INSURANCE_AGENTS_PARAM IAP on (IAP.AGENT_MASTER_INTERNAL_ID=IA.AGENT_INTERNAL_ID)
join COMIS_TYPE CT2 on (CT2.CONTRACT_PARAM_ID=IAP.AGENT_COMMISSION_TYPE)
where
(C.RECORD_STATE= 100 )
and (CA.RECORD_STATE= 100 )
and (CT1.RECORD_STATE= 100 )
and (IA.RECORD_STATE= 100 )
and (IAP.RECORD_STATE= 100 )
and (CT2.RECORD_STATE= 100 )
и усьо...

Но!!! Если его тупо выполнить ДВА раза
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
select
C.CONTRACT_ID,
CA.AGENT_ID,
coalesce(CA.COMMISSION_TYPE,IAP.AGENT_COMMISSION_TYPE) as COMMISSION_TYPE,
coalesce(CT1.CONTRACT_PARAM_NAME,CT2.CONTRACT_PARAM_NAME) as COMMISSION_TYPE_NAME,
case CA.COMMISSION_TYPE
   when  0  then CA.COMMISSION_VALUE
   when  1  then CA.COMMISSION_SUM
   else IAP.AGENT_COMMISSION
end as AGENT_COMMISSION
from
CONTRACT C
join CONTRACT_AGENTS CA on (CA.CONTRACT_ID=C.CONTRACT_ID)
join COMIS_TYPE CT1 on (CT1.CONTRACT_PARAM_ID=CA.COMMISSION_TYPE)
join INSURANCE_AGENTS IA on (IA.AGENT_ID=CA.AGENT_ID)
join INSURANCE_AGENTS_PARAM IAP on (IAP.AGENT_MASTER_INTERNAL_ID=IA.AGENT_INTERNAL_ID)
join COMIS_TYPE CT2 on (CT2.CONTRACT_PARAM_ID=IAP.AGENT_COMMISSION_TYPE)
where
(C.RECORD_STATE= 100 )
and (CA.RECORD_STATE= 100 )
and (CT1.RECORD_STATE= 100 )
and (IA.RECORD_STATE= 100 )
and (IAP.RECORD_STATE= 100 )
and (CT2.RECORD_STATE= 100 )

select
C.CONTRACT_ID,
===>CA.AGENT_ID,
coalesce(CA.COMMISSION_TYPE,IAP.AGENT_COMMISSION_TYPE) as COMMISSION_TYPE,
coalesce(CT1.CONTRACT_PARAM_NAME,CT2.CONTRACT_PARAM_NAME) as COMMISSION_TYPE_NAME,
case CA.COMMISSION_TYPE
   when  0  then CA.COMMISSION_VALUE
   when  1  then CA.COMMISSION_SUM
   else IAP.AGENT_COMMISSION
end as AGENT_COMMISSION
from
CONTRACT C
join CONTRACT_AGENTS CA on (CA.CONTRACT_ID=C.CONTRACT_ID)
join COMIS_TYPE CT1 on (CT1.CONTRACT_PARAM_ID=CA.COMMISSION_TYPE)
join INSURANCE_AGENTS IA on (IA.AGENT_ID=CA.AGENT_ID)
join INSURANCE_AGENTS_PARAM IAP on (IAP.AGENT_MASTER_INTERNAL_ID=IA.AGENT_INTERNAL_ID)
join COMIS_TYPE CT2 on (CT2.CONTRACT_PARAM_ID=IAP.AGENT_COMMISSION_TYPE)
where
(C.RECORD_STATE= 100 )
and (CA.RECORD_STATE= 100 )
and (CT1.RECORD_STATE= 100 )
and (IA.RECORD_STATE= 100 )
and (IAP.RECORD_STATE= 100 )
and (CT2.RECORD_STATE= 100 )
- первый резалтсет - пустой
, а второй резалтсет уже такой как надо...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Грабли с coalesce
    #35238206
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в шоке
:
1. Просто добавил еще одну строку в таблицу - "кривой" запрос вернул только ее
2. Добавил еще один столбец для вывода - "кривой" запрос вернул весь рекордсет с первого раза.
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Грабли с coalesce
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]