Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

30 Июнь 2022, 19:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Сортировка таблицы по Null  (Прочитано 638 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vlad77
Новичок
*
Offline Offline

Сообщений: 4


« Стартовое сообщение: 8 Июнь 2022, 22:20 »

       Здравствуйте. Как  отсортировать в таблице по полю дата1 (формат Date) сначала по возрастанию дат, а затем поля с Null значениями:
        Dim oControl      'Элемент управления - источник сообщения
   Dim oForms      'Коллекция форм
   Dim oForm      'Главная форма
 
   oControl = oEvent.Source
   oForms = oControl.getModel().getParent().getParent()
   oForm = oForms.getByName("Форма")
   oForm.Filter = "(""Выполнено""=false AND ""Дата1"">='#2022-06-08#')"  ' фильтр работает, б/3
   oForm.Order="Дата1 ASC, Текст='Контрольная' desc, Текст" ' сортировка работает, б/3 - но выводит сначала значения с полями Null столбца Дата1, а затем сортирует по возрастанию Дата1
 ' пробовал oForm.Order="Not Дата1 Is null ASC, Текст='Контрольная' desc, Текст"  --- ругается
   oForm.reload
   


Спасибо.
Записан
mikekaganski
Гуру
*******
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 774


« Ответ #1: 9 Июнь 2022, 09:03 »

Этот ответ на StackOverflow работает (проверил на Forebird Embedded и на HSQLDB Embedded):

Код:
SELECT * FROM "Table1" ORDER BY ( CASE WHEN "date" IS NULL THEN 1 ELSE 0 END ) ASC, "date" ASC

Предположительно и в коде можно задать

Код:
oForm.Order="( CASE WHEN Дата1 IS NULL THEN 1 ELSE 0 END ) ASC, Дата1 ASC, Текст='Контрольная' desc, Текст"
Записан

С уважением,
Михаил Каганский
eeigor
Опытный пользователь
***
Online Online

Пол: Мужской
Сообщений: 1 104


« Ответ #2: 9 Июнь 2022, 12:54 »

Поинтересуюсь:
Целая условная конструкция в теле запроса.
А просто функцию типа IIF() для вычисляемого поля использовать нельзя, как, например, в MS Access?
Записан

Ubuntu 18.04 LTS • LibreOffice 7.3.2.2 Community
sokol92
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 939


WWW
« Ответ #3: 9 Июнь 2022, 16:29 »

Некоторые базы, например, Postgres, поддерживают конструкции NULLS { FIRST | LAST }.
« Последнее редактирование: 9 Июнь 2022, 17:12 от sokol92 » Записан

Владимир.
vlad77
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #4: 9 Июнь 2022, 23:06 »

Спасибо. Зачтено! Проблема решена! (mikekaganski )
Записан
mikekaganski
Гуру
*******
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 774


« Ответ #5: 9 Июнь 2022, 23:15 »

просто функцию типа IIF()

Моё близкое общение с СУБД закончилось примерно в 1997, когда я писал несколько задач с использованием Borland Interbase. А с Access я вообще никогда близко не сталкивался, как кстати и с Base Улыбка

Но решил посмотреть, что такое Iif в Access. Если я правильно понял и речь об этом, то замена

Код:
( CASE WHEN "date" IS NULL THEN 1 ELSE 0 END )

на

Код:
Iif("date" IS NULL, 1, 0)

не кажется глобальным упрощением даже с точки зрения внешнего вида запроса. А переносимость одного из этих вариантов делает его на мой взгляд однозначно предпочтительным.
« Последнее редактирование: 9 Июнь 2022, 23:17 от mikekaganski » Записан

С уважением,
Михаил Каганский
vlad77
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #6: 9 Июнь 2022, 23:27 »

Iif("date" IS NULL, 1, 0) - ругается
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!