Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Функция SUM() и Coalesce() как подружить ? / 10 сообщений из 10, страница 1 из 1
25.03.2014, 16:44:34
    #38596034
AlexSem
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция SUM() и Coalesce() как подружить ?
Здравствуйте гуру, помогите со следующим вопросом.
Сам в огнептице не шибко силён.

Можно ли в жарптице (вер. 2.1.5 Win32) создать алиасы для функции, а конкретно есть необходимость
подмены SUM(tra-ta-ta) в ХП автоматом на Coalesce( SUM(tra-ta-ta) , 0)
Годится если как то заменить SUM на например ZUM чтобы при этом выполнялась конструкция Coalesce(Sum(tra-ta-ta),0).
Скриптом менять во всех ХП SUM на ZUM я научился.

Дополнительно о задаче:
Есть десятки FDB файлов в 5 филиалах, а предыдущий программер не знал (наверное) что SUM() возвращает Null если нет
записей удовлетворяющих условиям в Where, в каждом FDB свой набор ХП и я обнаружил что в некоторых нет coalesce и следовательно результат будет непредсказуемым. Может есть глобальная установка при которой сервер сам присваивает ноль в результат.
В основном Sum используются внутри конструкции for select.

Заранее спасибо, тем кто высказал своё мнение.
...
Рейтинг: 0 / 0
25.03.2014, 16:55:42
    #38596049
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция SUM() и Coalesce() как подружить ?
AlexSemМожно ли в жарптице (вер. 2.1.5 Win32) создать алиасы для функции, а конкретно есть необходимость
подмены SUM(tra-ta-ta) в ХП автоматом на Coalesce( SUM(tra-ta-ta) , 0)

нет нельзя
...
Рейтинг: 0 / 0
25.03.2014, 16:57:05
    #38596052
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция SUM() и Coalesce() как подружить ?
AlexSem,

Придется огорить - для твоей версии - только скриптами.
...
Рейтинг: 0 / 0
25.03.2014, 16:57:37
    #38596055
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция SUM() и Coalesce() как подружить ?
AlexSem а предыдущий программер не знал (наверное) что SUM() возвращает Null если нет
записей удовлетворяющих условиям в Where, в каждом FDB свой набор ХП и я обнаружил что в некоторых нет coalesce и следовательно результат будет непредсказуемым. Может есть глобальная установка при которой сервер сам присваивает ноль в результат.
В основном Sum используются внутри конструкции for select.

Заранее спасибо, тем кто высказал своё мнение.

Если нет записей удовлетворяющих условиям в Where то оно ничего не вернёт (если конечно там до кучи нет и COUNT()).
И соотвественно если это цикл FOR то он просто "пропустится", если это просто SELECT то в переменной останется предыдущее значение.
Так что простая замена может не дать ожидаемого результата
...
Рейтинг: 0 / 0
25.03.2014, 16:59:40
    #38596058
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция SUM() и Coalesce() как подружить ?
AlexSemпредыдущий программер не знал (наверное) что SUM() возвращает Null если нет записей удовлетворяющих условиям в WhereЗаписей (кортежей) в этом случае просто не будет, так что одного coalesce тут недостаточно.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
with data as(
  select 1 u, 100 v from rdb$database union all
  select 2 u, 200 v from rdb$database union all
  select 1 u, 300 v from rdb$database
)
select u,coalesce(sum(v),0) 
from rdb$database left join data on u<0
group by u
...
Рейтинг: 0 / 0
25.03.2014, 17:02:25
    #38596064
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция SUM() и Coalesce() как подружить ?
m7mЕсли нет записей удовлетворяющих условиям в Where то оно ничего не вернёт (если конечно там до кучи нет и COUNT()).count(*) поможет, если только туда не всунули group by :-)
...
Рейтинг: 0 / 0
25.03.2014, 17:36:59
    #38596125
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция SUM() и Coalesce() как подружить ?
Таблоидm7mЕсли нет записей удовлетворяющих условиям в Where то оно ничего не вернёт (если конечно там до кучи нет и COUNT()).count(*) поможет, если только туда не всунули group by :-)
Ну да, COUNT() я зря приплел, group by тут более к месту, ибо SELECT sum() ... , без group by всегда вернет одну запись
...
Рейтинг: 0 / 0
25.03.2014, 18:07:56
    #38596172
AlexSem
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция SUM() и Coalesce() как подружить ?
Thanx всем,
мда, придётся скриптами + аналитику включить и тэги свои ставлять.

А можно ещё вопросик, может существует ли в ЖП штатное что-то типа № версии ХП или дата изменения его тела, чтобы по нескольку раз не менять тело ХП. Если нет тогда придётся свои тэги-комментарии вставлять, например типа "--stp_version_control=2014"


Всем ещё раз спасибочки.
...
Рейтинг: 0 / 0
25.03.2014, 18:15:50
    #38596189
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция SUM() и Coalesce() как подружить ?
AlexSemсуществует ли в ЖП штатное что-то типа № версии ХП или дата изменения его теладо 2.5 включительно этого нету :(
...
Рейтинг: 0 / 0
25.03.2014, 18:17:39
    #38596195
AlexSem
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция SUM() и Coalesce() как подружить ?
Таблоид, СПАСИБО И УВАЖУХА.

Еще спасибо Таблоид-у за его интересные топики и эксперименты.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Функция SUM() и Coalesce() как подружить ? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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