powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Глюк при выполнении SQL
12 сообщений из 12, страница 1 из 1
Глюк при выполнении SQL
    #37505487
dm-23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выполняю обычный вложенный запрос:

Код: plaintext
1.
2.
3.
Select c1, c2, c3, c4, (case when c4> 0  then c1/c4 else case when c1<> 0  then c4/c1 else  1  end end) с5
from
(select c1,c2,c3,c4 from MyTable where id in ( 1 , 2 , 3 , 4 , 5 ))
where c1+c2+c3+c4<= 20 

и вот гляжу на цифры в полном шоке, в полученной таблице значения c1,c2,c3,c4 верные, а вот значение c5 удивило,
при его расчете в формуле c4/c1 значение c1 берется из предыдущей строки ! Что это ? Может кто сталкивался ?
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37505545
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы хотите, чтобы вам ответили на вопрос, а сами поленились написать версию каше, описание класса,
пример тестовых данных.

Кстати, почему у вас case вложенный?
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37505549
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dm-23Что это ?
Нонсенс.

dm-23Может кто сталкивался ?
Сделай тестовый пример с данными и всем остальным - посмотрим.
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37505614
dm-23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
извиняюсь, торопился, нонсенс , согласен. Что за класс не могу сказать, не я разработчик, я только отображение в SQL вижу.

Версия: Cache for Windows (x86-64) 2010.2.4 (Build 802U) Fri Apr 15 2011 11:57:53 EDT.

И к примеру подробнее, действительно не совсем понятно написал, еще раз sorry:

Код: 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.
select cast(s.c_7 as numeric( 10 , 2 )),
cast(s.c_8 as numeric( 10 , 2 )),
cast(s.c_9 as numeric( 10 , 2 )),
cast(s.c_10 as numeric( 10 , 2 )),
cast(s.c_11 as numeric( 10 , 2 )),
cast(s.c_12 as numeric( 10 , 2 )),
cast(s.c_13 as numeric( 10 , 2 )),
cast(s.c_14 as numeric( 10 , 2 )),
cast(s.c_15 as numeric( 10 , 2 )),
cast(s.c_16 as numeric( 10 , 2 )),
cast(s.c_17 as numeric( 10 , 2 )),
cast(s.c_18 as numeric( 10 , 2 )),
cast( 100 *(case when s.c_11<> 0  then s.c_15/s.c_11 else  1  end) as numeric( 10 , 2 )),
cast( 100 *(case when s.c_12<> 0  then s.c_16/s.c_12 else  1  end) as numeric( 10 , 2 )),
cast( 100 *(case when s.c_13<> 0  then s.c_17/s.c_13 else  1  end) as numeric( 10 , 2 )), 
cast( 100 *(case when s.c_14<> 0  then s.c_18/s.c_14 else  1  end) as numeric( 10 , 2 )), 
cast( 100 *(case when s.c_8> 0  then case when (s.c_12+s.c_8)<> 0  then s.c_16/(s.c_12+s.c_8) else  1  end else case when s.c_12<> 0  then (s.c_16+s.c_8)/s.c_12 else  1  end end) as numeric( 10 , 2 )),
cast( 100 *(case when s.c_9> 0  then case when (s.c_13+s.c_9)<> 0  then s.c_17/(s.c_13+s.c_9) else  1  end else case when s.c_13<> 0  then (s.c_17+s.c_9)/s.c_13 else  1  end end) as numeric( 10 , 2 )),
cast( 100 *(case when s.c_10> 0  then case when (s.c_14+s.c_10)<> 0  then s.c_18/(s.c_14+s.c_10) else  1  end else case when s.c_14<> 0  then (s.c_18+s.c_10)/s.c_14 else  1  end end) as numeric( 10 , 2 ))
from  MyClass1 i 
inner  join 
(SELECT a.id, 
isnull(field1, 0 ) c_7,  
isnull(field2, 0 ) c_8,
isnull(field3, 0 ) c_9,
isnull(field4, 0 ) c_10,
 4 *isnull(fields5, 0 ) c_11,  
 4 *isnull(fields6, 0 ) c_12,  
 4 *isnull(fields7, 0 ) c_13,  
 4 *isnull(fields8, 0 ) c_14,  
isnull(b.sm_s, 0 ) c_15, 
isnull(b.sm_n, 0 ) c_16, 
isnull(b.sm_ff, 0 ) c_17, 
isnull(b.sm_tf, 0 ) c_18, 
FROM         MyClass2 a  
left join (SELECT    id, sum(case when income= 1  then "sum" else  0  end)  sm_s,sum(case when income= 1  then sum1 else  0  end)  sm_n,
sum(case when income= 1  then sum2 else  0  end)  sm_ff, sum(case when income= 1  then sum3 else  0  end)  sm_tf
FROM         MyClass3
group by id) b on a.id=b.id) s on i.id=s.id

самое интересное тут:

Код: plaintext
1.
2.
cast( 100 *(case when s.c_8> 0  then case when (s.c_12+s.c_8)<> 0  then s.c_16/(s.c_12+s.c_8) else  1  end else case when s.c_12<> 0  then (s.c_16+s.c_8)/s.c_12 else  1  end end) as numeric( 10 , 2 )),
cast( 100 *(case when s.c_9> 0  then case when (s.c_13+s.c_9)<> 0  then s.c_17/(s.c_13+s.c_9) else  1  end else case when s.c_13<> 0  then (s.c_17+s.c_9)/s.c_13 else  1  end end) as numeric( 10 , 2 )),
cast( 100 *(case when s.c_10> 0  then case when (s.c_14+s.c_10)<> 0  then s.c_18/(s.c_14+s.c_10) else  1  end else case when s.c_14<> 0  then (s.c_18+s.c_10)/s.c_14 else  1  end end) as numeric( 10 , 2 ))

в последнем условии:

Код: plaintext
(s.c_18+s.c_10)/s.c_14
например s.c_10 получает значение s.c_10 предыдущей записи, если конечно условие соответствует, если условие не выпадает на это выражение, все значения нормальные....
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37505685
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое ощущение, что либо запрос целиком перенесен из другой субд, либо программист давно работал на другой субд.
Мне кажется, какой-то нетипичный запрос для каше. К тому же, по видимому, он еще и упрощен (после c_18 было продолжение?)
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37505800
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dm-23 ,
Попробуйте выполнить все подзапросы отдельно: i, a, b, a+b, i+a, i+b. Возможно проблема в дублирующих записях в таблицах (т.е. несколько записей с одинаковым полем id).
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37505898
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Мне кажется, какой-то нетипичный запрос для каше.
Я не узнаю джунглей! (с) Маугли

У меня аналогичное впечатление от этого "кода"...
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37505904
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, у меня были случаи, когда глючил sql (обращался в WRC), а уж с планами я повоевал, уу.
Но тут как-то все еще страшнее - джойнится не таблица, а запрос, причем сама эта таблица получается в результате джойна с группировкой. Мне казалось, каше такого не позволяет вообще.
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37505908
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно как-то найти минимальный пример, при котором его корежит.
К сожаления, похоже, у вас доступа в базу нет сделать тестовый вариант, а так бы сделать минимальный примео, при котором ошибка сохраняется.
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37506039
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dm-23Select *
From (
select * From
MyTable
where id in (1,2,3,4,5)
)
where c1+c2+c3+c4<=20

или
Код: plaintext
1.
2.
3.
4.
5.
Select * MyTable 
where 
(id in ( 1 , 2 , 3 , 4 , 5 )) 
And 
((c1+c2+c3+c4)<= 20 )
?
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37506189
dm-23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запрос действительно не типичный для каше, но по другому никак. Отдельно по кусочкам все работает, и значения все ожидаемые. Проведу сегодня еще ряд опытов и отпишусь по результату.
...
Рейтинг: 0 / 0
Глюк при выполнении SQL
    #37506302
dm-23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ногами не пинайте сильно, методом проб и ошибок выяснил следующее, если на верхнем уровне выбирается само поле, запрос формируется нормально, стоит только использовать преобразование и результат описанный в самом начале.

Если в запросе вот этот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
cast(s.c_8 as numeric( 10 , 2 )),
cast(s.c_9 as numeric( 10 , 2 )),
cast(s.c_10 as numeric( 10 , 2 )),
cast(s.c_11 as numeric( 10 , 2 )),
cast(s.c_12 as numeric( 10 , 2 )),
cast(s.c_13 as numeric( 10 , 2 )),
cast(s.c_14 as numeric( 10 , 2 )),
cast(s.c_15 as numeric( 10 , 2 )),
cast(s.c_16 as numeric( 10 , 2 )),
cast(s.c_17 as numeric( 10 , 2 )),
cast(s.c_18 as numeric( 10 , 2 )),
, заменить на
Код: plaintext
s.c_8,s.c_9,s.c_10,s.c_11,s.c_12,s.c_13,s.c_14,s.c_15,s.c_16,s.c_17,s.c_18
, все работает. По какой причине мне не ясно.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Глюк при выполнении SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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