C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Помощь с запросом  (Прочитано 7775 раз)
volvo877
Глобальный модератор


Сказали спасибо: +736/-1
Offline

Сообщений: 891


Re: Помощь с запросом
« Ответ #30 : 20 Май 2015, 17:59:32 »

Я бы на твоем месте все-таки таблицы-то переделал. А то так и будешь глюки находить, ты ж считай, каждый раз новое ТЗ ставишь - теперь выясняется, что мало того, что может быть несколько комнат с NULL-полями в enddata, что изначально ВООБЩЕ НЕ РАССМАТРИВАЛОСЬ, так еще могут быть комнаты с одним и тем же id  как с пустыми полями id_organizations, так и с заполненными, да еще и как с пустым enddata, так и с НЕпустым. И все опять заново. Надоело... Вот так перепиши третий UNION:

Код
UNION -- добавляем те комнаты, у которых в organizations_rooms id_organizations is NULL
 
 SELECT
   organizations_rooms.id_rooms AS ID,
   rooms.name AS roomname,
   rooms.checkbool AS checkbool,
   '' AS orgname
 FROM rooms
 INNER JOIN organizations_rooms
   ON rooms.id = organizations_rooms.id_rooms
 WHERE 0 = (SELECT COUNT(id_rooms) FROM organizations_rooms WHERE id_rooms = rooms.id AND id_organizations IS NOT NULL)  -- проверить, что не включена эта же комната в предыдущей части запроса
 GROUP BY organizations_rooms.id_rooms, rooms.name, rooms.checkbool, organizations_rooms.id_organizations, organizations_rooms.enddata
 HAVING (((organizations_rooms.id_organizations) IS NULL) AND ((organizations_rooms.enddata) IS NULL))
 
, и займись переделыванием. Нельзя в одной таблице хранить и текущие и архивные данные (никому уже нафиг не нужные) Как только срок аренды закончился - немедленно переносить данные с таблицу archive, и не маяться неизвестно чем, потом одним простым запросом по organizations_rooms будешь вытаскивать информацию, безо всяких UNION-ов, а если кому-то понадобится статистика - то работать будешь с архивной таблицей. Все очень просто.

Я больше править недочеты проектирования не буду. Неинтересно и скучно...
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Помощь с запросом
« Ответ #31 : 20 Май 2015, 18:24:16 »

Большое спасибо, работает.

P.S.
Если снова будут дублирующие записи на этом запросе с новыми тестовыми данными, то попробую создать таблицу архивов и туда переносить данные. Такого раньше не делала. Попробую разобраться с переносом.
Если не получиться разобраться, то переделаю внешние ключи в таблице organizations_rooms на каскадное удаление, следовательно там не будет значений с NULL. Будут теряться определенные архивные данные, значит так и будет.
Буду надеяться, что твой запрос сейчас работает в полном объеме.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Помощь с запросом
« Ответ #32 : 20 Май 2015, 18:57:36 »

На новых тестовых данных ошибок нет.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Помощь с запросом
« Ответ #33 : 20 Май 2015, 19:19:23 »

Можно ли как-то заставить ClientDataSet сортировать по колонке orgname?
Мое сообщение #25 в этой теме об ошибке.
Или все же это не возможно?
Спасибо.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Помощь с запросом
« Ответ #34 : 21 Май 2015, 09:32:11 »

Кажется начинаю догадываться. Наверное агрегейт надо переписать с новым типом?:
Код
CREATE AGGREGATE textcat_all(
     basetype    = CHARACTER VARYING(200),
     sfunc       = textcat,
     stype       = CHARACTER VARYING(200),
     initcond    = ''
 );
 

P.S.
Нет, мысль не правильная.
ERROR:  return type of transition function textcat is not character varying
« Последнее редактирование: 21 Май 2015, 10:17:09 от SilverFish » Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


« Ответ #35 : 26 Май 2015, 15:53:32 »

Решение с сортировкой нашлось. Надо создать дополнительную вычисляемую колонку в ClientDataSet. В событии вычисления значения просто перенести туда данные из колонки которая не желает сортироваться. Новая колонка сортируется, а та что не сортируется делаю не видимой.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.109 секунд. Запросов: 19.