|
Небольшой вопрос по функции МАКСИМУМ() | ☑ | ||
---|---|---|---|---|
0
stateg
06.11.14
✎
12:51
|
Добрый день.
В запросе есть проверка поля на NULL. В случае отлова нулла хочется видеть максимальное значение поля, но на 1 больше. То есть если значение не указано, то оно должно быть больше всех имеющихся. Возможно ли это реализовать непосредственно в запросе, а не постобработке результата? И если да, то каким образом, спасибо зы ISNULL(Поле, 9999...) не предлагать :D |
|||
1
vicof
06.11.14
✎
12:53
|
ISNULL(Поле, 9999) чем не устраивает?
|
|||
2
stateg
06.11.14
✎
12:55
|
(1) Как-то не по феншую. А если однажды появится значение 10000? Тогда 9999 уже не будет наибольшим
|
|||
3
Фокусник
06.11.14
✎
12:56
|
(2) Не жадничай, добавь девяток побольше ;)
|
|||
4
Timon1405
06.11.14
✎
12:57
|
ОченьБольшоеЧисло = 9999999999; © УТ11(!)
|
|||
5
stateg
06.11.14
✎
13:04
|
Так значит к значению поля прибавить единицу никак не представляется возможным внутри запроса?
|
|||
6
Жан Пердежон
06.11.14
✎
13:11
|
объединения/соединения, вариантов масса
|
|||
7
VladZ
06.11.14
✎
13:12
|
(4) Это решение еще в семерке попадалось.
|
|||
8
KAO111
06.11.14
✎
13:14
|
а в чем проблема, для простоты можно максимум получить в первом пакете, тут вроде как раз спокойно можно эту задачу решить
|
|||
9
КонецЦикла
06.11.14
✎
13:16
|
(5) К нулл прибавить единицу? Тогда уж вложенным запросом для записей имевших там нулл прибавить к максимальному значению еще 1. Но нафига?
|
|||
10
Fragster
гуру
06.11.14
✎
13:22
|
если это тупо для сортировки, то сделать поле ПорядокNULL, и заполнять его 1 и 0 для NULL и не NULL, соответственно, сортировать по нему в первую очередь (в нужном направлении)
|
|||
11
Зеленый пень
06.11.14
✎
13:23
|
(0)
ВЫБРАТЬ ВЫБОР КОГДА МАКСИМУМ(Поле) ЕСТЬ NULL ТОГДА 1 КОГДА МАКСИМУМ(ВЫБОР КОГДА Поле ЕСТЬ NULL ТОГДА 1 ИНАЧЕ 0 КОНЕЦ) = 1 ТОГДА МАКСИМУМ(Поле) + 1 ИНАЧЕ МАКСИМУМ(Поле) КОНЕЦ |
|||
12
Ненавижу 1С
гуру
06.11.14
✎
13:24
|
ВЫБРАТЬ
Контрагенты.Ссылка, ЕСТЬNULL(ПродажиОбороты.СтоимостьОборот, ВложенныйЗапрос.Поле1) КАК Поле1 ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты ПО (ПродажиОбороты.Контрагент = Контрагенты.Ссылка), (ВЫБРАТЬ МАКСИМУМ(ПродажиОбороты.СтоимостьОборот) + 1 КАК Поле1 ИЗ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты) КАК ВложенныйЗапрос |
|||
13
stateg
06.11.14
✎
13:38
|
(10) В моем случае сортировка производится по нескольким полям. Это получается "костыль" для "костыля", еще больше не по фен шую, чем ОченьБольшоеЧисло
(11) За "МАКСИМУМ(Поле) + 1" я был послан отладчиком (12) Пожалуй это будет самое правильное решение, спасибо :) |
|||
14
Fragster
гуру
06.11.14
✎
13:42
|
(12) а если несколько полей с NULL?
|
|||
15
Fragster
гуру
06.11.14
✎
13:42
|
(14)* строк
|
|||
16
stateg
06.11.14
✎
14:06
|
(12) Рано я обрадовался. У вас тот же МАКСИМУМ() + 1, отладчик выдает на нем ошибку (Неверные параметры "+"). Собственно из этого я и исходил при создании названия топика, но потом меня слегка унесло))
|
|||
17
vicof
06.11.14
✎
14:13
|
(16) Нечего радоваться, тут серьезный форум. Давай, рассказывай задачу.
|
|||
18
dk
06.11.14
✎
14:14
|
(16) ну и вынеси +1 выше
|
|||
19
stateg
06.11.14
✎
14:23
|
(16)Даже в таком случае:
ВЫБРАТЬ ПЕРВЫЕ 1 (Значение + 1) КАК Максимум ИЗ ... УПОРЯДОЧИТЬ ПО (Значение + 1) УБЫВ выдает ошибку на строке где + 1. Получается, что в запросе можно складывать значения полей, но нельзя прибавить к значению единицу? Пруф: i.imgur.com/w0GdfGR.png (17) Задача банальна - настраиваемая сортировка. Поля с заданными значениями выводятся по возрастанию значения, поля с NULL выводятся после Пока что из рабочих вариантов только ISNULL(Поле, 9999) |
|||
20
13_Mult
06.11.14
✎
14:26
|
(19) ВЫРАЗИТЬ как число?
|
|||
21
vicof
06.11.14
✎
14:28
|
(20) Какой выразить, он к нулл прибавляет единицу
|
|||
22
13_Mult
06.11.14
✎
14:34
|
вот изварт ))
МАКСИМУМ(ВЫРАЗИТЬ(ЕстьNULL(ВашеЗначение, 0) КАК ЧИСЛО(15, 2)))+1 КАК МАКСИМУМ |
|||
23
stateg
06.11.14
✎
14:35
|
(20) Никто не прибавляет единицу к нуллу =/ Или отладчик на момент компиляции уже знает, что там может быть нулл? Скрин я сделал просто для демонстрации ошибки
|
|||
24
stateg
06.11.14
✎
14:38
|
(20) За ВЫРАЗИТЬ() спасибо, этого не хватало в (12), теперь должно быть все ок. Хотя и все равно костыль для костыля)
|
|||
25
13_Mult
06.11.14
✎
14:45
|
Да получи Максимум по таблице, прибавь единицу и подставь потом туда где NULL
|
|||
26
13_Mult
06.11.14
✎
14:49
|
(24) Ни чего не костыль )) (12) нормальная запросина
|
|||
27
chudishe
06.11.14
✎
14:54
|
Все тлен. Вот тебе правильное решение:
|
|||
28
chudishe
06.11.14
✎
14:55
|
(27) +1 забыл.
|
|||
29
13_Mult
06.11.14
✎
14:59
|
(28) упадет на этом (ВТ_Таблица.Поле2 + 1) если Поле2 = NULL ))
|
|||
30
stateg
06.11.14
✎
15:09
|
(27) Спасибо, но правильное решение (12) + (20)
|
|||
31
chudishe
06.11.14
✎
17:17
|
(29) Нет, не упадет. Результатом любой операции с NULL будет внезапно NULL.
(30) Давай ты для начала проверишь эти решения, ага? Давай я даже для тебя разберу по-порядку. Вложенный запрос этого товарища (12) вычислит максимум ПО ВСЕМУ ЧТО У ТЕБЯ ЕСТЬ. Т.е. есть у тебя, например, таблица:
Так вот как ты думаешь, что ты получишь в результате выполнения его запроса? Ты получишь вот это:
Если тебе так и надо, то пожалуйста, дерзай! |
|||
32
stateg
07.11.14
✎
08:32
|
(31) мне и нужен был максимум по всему что есть, а упадет, т.к. как оказалось недостаточно просто взять поле и прибавить к нему + 1. Надо использовать функцию ВЫРАЗИТЬ(), в этом собственно и была главная загвоздка
(ВЫРАЗИТЬ(ВТ_Таблица.Поле2 КАК Число) + 1) если Поле2 = NULL |
|||
33
chudishe
07.11.14
✎
09:16
|
(32) У меня почему-то ничего не упало. Я свой запрос протестировал, например.
|
|||
34
МишельЛагранж
07.11.14
✎
10:04
|
(32)>>если Поле2 = NULL
- так прямо и напиши в запросе |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |