Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как написать агрегатную функцию (ака Sum() / Max()) / 12 сообщений из 12, страница 1 из 1
24.09.2003, 15:10
    #32274282
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
Народ!
Такая проблема:
собираем в Union данные,
получаем две похожие строки (цифрами различаются - sum() = получили, что нада), вешаем на него Group By.

но вот беда: есть текстовое поле Примечание, которое в одном запросе всегда пустое,
а в другом местами есть текст - ессно, группировка на нем и спотыкается.
пример:

есть:

ОргА 120 0 Примечание:за товар
ОргА 0 230 <null>

нада после группировки:

ОргА 120 230 Примечание:за товар

А группировка не пройдет, null мешается.

Какую функцию применить, чтобы в итоге после агрегирования получить 1 строку и с примечанием?
Или как написать агрегатную фцию, которая это смогет?
Спасибо всем!
...
Рейтинг: 0 / 0
24.09.2003, 15:15
    #32274295
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
Max - это не то?
...
Рейтинг: 0 / 0
24.09.2003, 15:30
    #32274332
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
первое ,что испытано. Вроде получается *то*, теперь ищу подтверждения БЕЗОШИБОЧНОСТИ ее отрабатывания (типа спотык на Ё и т.д...)
...
Рейтинг: 0 / 0
24.09.2003, 15:40
    #32274353
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
Null всегда будет меньше, чем любое другое значение.
...
Рейтинг: 0 / 0
24.09.2003, 15:47
    #32274365
sasha_1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
>Null всегда будет меньше, чем любое другое значение.
это для функции Max
а для Min наоборот
Null всегда будет БОЛЬШЕ, чем любое другое значение.

видимо Null просто не учитываются при вычислении этих функций.
...
Рейтинг: 0 / 0
24.09.2003, 15:50
    #32274370
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
The DMin and DMax functions ignore Null values in the field referenced by expr. However, if no record satisfies criteria or if domain contains no records, the DMin and DMax functions return a Null.

А на агрегаты сиквела хэлп не работает...

У кого есть поделитесь, а? А2000
...
Рейтинг: 0 / 0
24.09.2003, 22:51
    #32274750
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
Да, действительно. Я сейчас проверил живьем. Min и Max в роли агрегатных функций игнорируют Null'ы. Таким образом, если есть данные такого вида:

1
2
Null
4
5

- то Min и Max вернут соответственно 1 и 5.

Однако со строками надо соблюдать осторожность. То, что визуально выглядит как Null, может оказаться на самом деле стрингом нулевой длины, так что Min'ом все-таки лучше не пользоваться.

Из строк "ААА" и Null - Max вернет "ААА".
Из строк "ААА" и "" - Max вернет "ААА".
Из строк "ААА" и Null - Min вернет "ААА".
Из строк "ААА" и "" - Min вернет "".
...
Рейтинг: 0 / 0
24.09.2003, 22:59
    #32274751
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
удивительно, и sum игнорирует пустые значения.

нет бы выдал null (неопределенность), встретив хоть один null... ;)
...
Рейтинг: 0 / 0
25.09.2003, 00:22
    #32274772
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
2 Alexus12
Попробуй такой вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select a.fld_name,a.sum1,a.sum2,b.fld_descr
from 
     (select fld_name,sum(fld_sum1) as sum1,sum(fld_sum2) as sum2
      from my_query group by fld_name) as a
left join
     (select fld_name,fld_descr from my_query where descr is not null) as b
on a.fld_name=b.fld_name
...
Рейтинг: 0 / 0
25.09.2003, 00:44
    #32274779
Gavr107
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
Если тебе не нужны агрегативные функции, а только уникальные результаты, попробуй SELECT DISTINCT. Не забудь в UNION вывести уникальный ключ.
...
Рейтинг: 0 / 0
25.09.2003, 00:45
    #32274781
Gavr107
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
Забыл сказать, попробой использовать Nz(Поле,'') или Nz(Поле,0) вместо Поле.
...
Рейтинг: 0 / 0
25.09.2003, 13:35
    #32275371
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как написать агрегатную функцию (ака Sum() / Max())
>удивительно, и sum игнорирует пустые значения.
Видимо, он живет по образу и подобию этого:
DMin and DMax functions ignore Null values in the field referenced by expr. However, if no record satisfies criteria or if domain contains no records, the DMin and DMax functions return a Null.

>Если тебе не нужны агрегативные функции
Нужны - см. пост1. - иначе получу бред

2 VIG: отдельно суммы, отдельно ненуллы, затем джойн?
да, такое прокатить.
но пока пользую Max() - до первого глюка так сказать ;)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как написать агрегатную функцию (ака Sum() / Max()) / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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