powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Это глюк или фича?
8 сообщений из 8, страница 1 из 1
Это глюк или фича?
    #34127294
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверял на 9.02.3320 и последнем 9.02.3402

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE "DBA"."test_miss"
(
	"b"     			smallint NOT NULL ,
	"d"     			smallint NOT NULL , 
	 CONSTRAINT "pk"  PRIMARY KEY ("b"),
);
INSERT INTO "DBA"."test_miss" VALUES ( 1 , 1 );
INSERT INTO "DBA"."test_miss" VALUES ( 2 , 1 );
INSERT INTO "DBA"."test_miss" VALUES ( 3 , 1 );
INSERT INTO "DBA"."test_miss" VALUES ( 4 , 2 );
INSERT INTO "DBA"."test_miss" VALUES ( 5 , 2 );

select 
    sum(if convert(char,b)= 2  then  1  else  0  endif) over (partition by d) as v1,
    convert(char,v3) as v2,
    b as v3,
    d as v4
from dba.test_miss;
На выходе получаем такую выборку:
v1v2v3v405420552131113211331
Может я чего и не догоняю в работе OLAP функций, но по начертанию v3 и v2 должны совпадать!
Может кто-нибудь запостит на sybase эту фигню?
...
Рейтинг: 0 / 0
Это глюк или фича?
    #34127314
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer
Код: plaintext
sum(if convert(char,b)= 2  then  1  else  0  endif) over (partition 

тут опечатался, одинарные кавычки добавить надо, но сути не меняет:
Код: plaintext
sum(if convert(char,b)='2' then  1  else  0  endif) over (partition 
...
Рейтинг: 0 / 0
Это глюк или фича?
    #34128325
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ща спросим :)

---
http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
Это глюк или фича?
    #34128660
Andrey Sribnyak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iLLer пишет:

sybase под рукой нет... но как по мне так все правильно.
давай попробуем разобраться

select
if convert(char,b)=2 then 1 else 0 endif, b, d
from dba.test_miss;

вернет нам:

0, 1, 1
1, 2, 1
0, 3, 1

0, 4, 2
0, 5, 2


теперь попробуем разогбраться что же выдаст нам
sum(if convert(char,b)=2 then 1 else 0 endif) over (partition by d) as v1,
вернее даже.. по чем у нас групировка будет?
по d
различных значений d у нас 2 (1 и 2)
сумма всех элементов с d=1 равна 1
сумма всех элементов с d=2 равна 0

т.е ключевое слово OVER указывает, что функция SUM будет считать сумму в
пределах указанного ранга, который будет определяться (PARTITION BY) для
каждого d

тогда запрос

select
sum(if convert(char,b)=2 then 1 else 0 endif) over (partition by d)
as v1
from dba.test_miss;

выдаст нам
1
0

запрос
select
sum(if convert(char,b)=2 then 1 else 0 endif) over (partition by d)
as v1, d
from dba.test_miss;

выдаст нам
1, 2
0, 4


запрос
select
sum(if convert(char,b)=2 then 1 else 0 endif) over (partition by d)
as v1, d, b
from dba.test_miss;

выдаст нам
0 4 2
0 5 2
1 1 1
1 2 1
1 3 1

т.е каждое следущее поле добавляет группировку. но не изменяет один раз
вычесленную сумму

>

Поправте меня, если я не прав :-)))
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Это глюк или фича?
    #34128773
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andrey SribnyakПоправте меня, если я не прав :-)))
Ты не туда смотришь.
Сравни результаты запросов
Код: plaintext
1.
2.
3.
4.
5.
6.
select 
    sum(if convert(char,b)='2' then  1  else  0  endif) over (partition by d) as v1,
    convert(char,b) as v2,
    b as v3,
    d as v4
from dba.test_miss;
Код: plaintext
1.
2.
3.
4.
select 
    convert(char,b) as v2,
    b as v3,
    d as v4
from dba.test_miss;
А потом объясни результаты в колонке v2.

2iLLer: Пока ответ только такой:
Glenn PaulleyThis appears to be a problem with the execution of window functions in version 9; version 10 does not exhibit this particular problem.
--
Glenn Paulley
Research and Development Manager, Query Processing
iAnywhere Solutions Engineering
Переводить надо? :)
...
Рейтинг: 0 / 0
Это глюк или фича?
    #34129883
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl2iLLer: Пока ответ только такой:
Glenn PaulleyThis appears to be a problem with the execution of window functions in version 9; version 10 does not exhibit this particular problem.
--
Glenn Paulley
Research and Development Manager, Query Processing
iAnywhere Solutions Engineering
Переводить надо? :)

Не, на 10 я пока не пойду, я не самоубийца)))
А выход я нашел. Вложенный if в sum выкинул в отдельную детерминированную функцию. И все конверты тоже в ней делаю, а она возвращает tinyint. Так все заработало как надо. Видимо, у них глюк именно в работе конверта внутри olap-sum. По крайней мере, внутрь olap-sum нельзя засовывать недетерминированные функции, а конверт по своему нутру наверно таким и является.
...
Рейтинг: 0 / 0
Это глюк или фича?
    #34134899
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Matthew Young-Lai (iAnywhere Solutions)Thanks for reporting this. Its a bug that can occur when the same complex
expression appears both inside and outside a window function argument. It
will be fixed in the next 902 ebf with build number 3408 or higher.


Matthew

---
http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
Это глюк или фича?
    #34138355
iLLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Matthew Young-Lai (iAnywhere Solutions)Thanks for reporting this. Its a bug that can occur when the same complex
expression appears both inside and outside a window function argument. It
will be fixed in the next 902 ebf with build number 3408 or higher.


Matthew


Спасибо. Это верх мечтаний.)))
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Это глюк или фича?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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