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

Код: 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
31.10.2011, 16:19
    #37505545
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк при выполнении SQL
Вы хотите, чтобы вам ответили на вопрос, а сами поленились написать версию каше, описание класса,
пример тестовых данных.

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

dm-23Может кто сталкивался ?
Сделай тестовый пример с данными и всем остальным - посмотрим.
...
Рейтинг: 0 / 0
31.10.2011, 16:54
    #37505614
dm-23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк при выполнении SQL
извиняюсь, торопился, нонсенс , согласен. Что за класс не могу сказать, не я разработчик, я только отображение в 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
31.10.2011, 17:31
    #37505685
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк при выполнении SQL
Такое ощущение, что либо запрос целиком перенесен из другой субд, либо программист давно работал на другой субд.
Мне кажется, какой-то нетипичный запрос для каше. К тому же, по видимому, он еще и упрощен (после c_18 было продолжение?)
...
Рейтинг: 0 / 0
31.10.2011, 18:45
    #37505800
Turk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк при выполнении SQL
dm-23 ,
Попробуйте выполнить все подзапросы отдельно: i, a, b, a+b, i+a, i+b. Возможно проблема в дублирующих записях в таблицах (т.е. несколько записей с одинаковым полем id).
...
Рейтинг: 0 / 0
31.10.2011, 20:05
    #37505898
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк при выполнении SQL
Блок А.Н.Мне кажется, какой-то нетипичный запрос для каше.
Я не узнаю джунглей! (с) Маугли

У меня аналогичное впечатление от этого "кода"...
...
Рейтинг: 0 / 0
31.10.2011, 20:10
    #37505904
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк при выполнении SQL
Вообще, у меня были случаи, когда глючил sql (обращался в WRC), а уж с планами я повоевал, уу.
Но тут как-то все еще страшнее - джойнится не таблица, а запрос, причем сама эта таблица получается в результате джойна с группировкой. Мне казалось, каше такого не позволяет вообще.
...
Рейтинг: 0 / 0
31.10.2011, 20:15
    #37505908
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк при выполнении SQL
Нужно как-то найти минимальный пример, при котором его корежит.
К сожаления, похоже, у вас доступа в базу нет сделать тестовый вариант, а так бы сделать минимальный примео, при котором ошибка сохраняется.
...
Рейтинг: 0 / 0
31.10.2011, 23:04
    #37506039
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк при выполнении SQL
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
01.11.2011, 08:00
    #37506189
dm-23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк при выполнении SQL
Запрос действительно не типичный для каше, но по другому никак. Отдельно по кусочкам все работает, и значения все ожидаемые. Проведу сегодня еще ряд опытов и отпишусь по результату.
...
Рейтинг: 0 / 0
01.11.2011, 10:40
    #37506302
dm-23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глюк при выполнении SQL
Ногами не пинайте сильно, методом проб и ошибок выяснил следующее, если на верхнем уровне выбирается само поле, запрос формируется нормально, стоит только использовать преобразование и результат описанный в самом начале.

Если в запросе вот этот код:
Код: 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
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Глюк при выполнении SQL / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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