ORDER BY
Модераторы: m0p3e, edward_K, Модераторы
ORDER BY
Добрый день, ВСЕМ!
Может кто-нибудь объяснить: почему не правильно отрабатывает SELECT, если в него добавить ORDER BY?
Вот мой текст:
.CREATE VIEW N1
AS SELECT *
FROM HOPE_Real
WHERE ((ROOT==HOPE_Real.nrec
and MyPodr==HOPE_Real.podr_nrec
))
!ORDER BY HOPE_Real.mc_gr_kod, HOPE_Real.mc_name
;
Если раскомментировать ORDER BY, то для разных подразделений данные из таблицы HOPE_Real выходят от первого подразделению .
Если закомментирую - то все правильно выходит (для каждого подразделения - свои данные). Но нет сортировки.
Спасибо!
Может кто-нибудь объяснить: почему не правильно отрабатывает SELECT, если в него добавить ORDER BY?
Вот мой текст:
.CREATE VIEW N1
AS SELECT *
FROM HOPE_Real
WHERE ((ROOT==HOPE_Real.nrec
and MyPodr==HOPE_Real.podr_nrec
))
!ORDER BY HOPE_Real.mc_gr_kod, HOPE_Real.mc_name
;
Если раскомментировать ORDER BY, то для разных подразделений данные из таблицы HOPE_Real выходят от первого подразделению .
Если закомментирую - то все правильно выходит (для каждого подразделения - свои данные). Но нет сортировки.
Спасибо!
Палка о двух концах.
Чтоб не мучиться с ордером
создайте в своей временной таблице индекс
и укажите его явно в выборке, ну или ордер добавьте. Это уже не суть, т.к. в изначальном примере все ограничевается подразделением (индекс) и сортируется (тоже нужен индекс для быстроты и для "правильности")
в итоге получим
При явном указании индекса сортировка пойдет именно по нему.
Чтоб не мучиться с ордером
создайте в своей временной таблице индекс
Код: Выделить всё
with index
(
...
HOPE_RealXXX = Podr_Nrec+mc_gr_kod+mc_name
...
)
в итоге получим
Код: Выделить всё
.Create View N1
As Select
*
From HOPE_Real(HOPE_RealXXX)
WHERE
((
MyPodr==HOPE_Real.podr_nrec
))
;
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
видимо ТП не завалили не работаюшими формами.
Глючит это давно, но если прописать все аккуратно, то работает.
Вся проблема в том, что сваливается на внешнюю выгрузку. При том в фейсе это работает стабильней, да и на маленьких данных как правило проблем нет и в формах. Одна из проблем изменение условий - после этого надо принудительно перечитать таблу. В фейсе rereadrecrod или еще чего то можно придумать, в форме это вроде как не пашет. Нужно помнить, что выгрузка происходит при первом обращении к таблице - поэтому условия нужно задавать в самом начале формы. Ну а поскольку внешняя выгрузка то * просто противопоказана, а перечисление всех используеиых полей обязательно. Да еще - выгрузка работает стабильней если в order by добавить поля по фильтру, но не факт.
Вот сие например пашет на не очень мелких данных, но условия задаются в начале.
Глючит это давно, но если прописать все аккуратно, то работает.
Вся проблема в том, что сваливается на внешнюю выгрузку. При том в фейсе это работает стабильней, да и на маленьких данных как правило проблем нет и в формах. Одна из проблем изменение условий - после этого надо принудительно перечитать таблу. В фейсе rereadrecrod или еще чего то можно придумать, в форме это вроде как не пашет. Нужно помнить, что выгрузка происходит при первом обращении к таблице - поэтому условия нужно задавать в самом начале формы. Ну а поскольку внешняя выгрузка то * просто противопоказана, а перечисление всех используеиых полей обязательно. Да еще - выгрузка работает стабильней если в order by добавить поля по фильтру, но не факт.
Вот сие например пашет на не очень мелких данных, но условия задаются в начале.
Код: Выделить всё
.create view vvv
as
select
perssfo.givedate,
katpodr.name,
persons.fio,
katmbp.name,
x$users.xu$loginname
from
perssfo
,perscard
,lschet
,persons
,katpodr
,katmbp
,x$users
where
(( perssfo.cperscard == perscard.nrec
and perscard.clschet == lschet.nrec
and lschet.tperson == persons.nrec
and lschet.cex == katpodr.nrec
and perssfo.ckatmbp == katmbp.nrec
and perssfo.atl_lastuser == x$users.atl_nrec
))
and
perssfo.enddate >= dtb
and perssfo.GIVEDATE >= dtb
and perssfo.GIVEDATE <= dte
and (PersSfo.SPISDATE = date(0,0,0) or PersSfo.SPISDATE>=dtb)
and 0000000000000000h <> perscard.clschet
order BY perssfo.GIVEDATE,katpodr.name,persons.fio,katmbp.name,x$users.xu$loginname;
Раскроем мысль: "Пришла эра FR в Галактике". 
Вон чего еще забабахали:
Другое дело, что под разные задачи нужны разные инструментарии. Есть отчеты которые удобно получать в Word, Excel. И зарубать поддержку того же самого rtf...

Вон чего еще забабахали:
Код: Выделить всё
* ПРОБЛЕМА В ПИР: 101.42820
* ПЕРВОЕ РЕШЕНИЕ: NEW
* КРАТКОЕ ОПИСАНИЕ: FCom2FastReport
* ПРОЕКТ: Инструментарий прикладного программиста
* ДЕТАЛИЗАЦИЯ: FCom - исполнение, интерпретация
# ЧТО ИЗМЕНЕНО: Формирование FCom-отчетов
FastReport
----- СУТЬ ПРЕДЛОЖЕНИЯ -----
Для FCOM-отчетов реализовать возможность создания потока данных для FastReport.
Дать возможность создания FR-отчетов по прототипу или присоединенной формам.
Их запуск из стандартного диалога выбора отчетов.
# КАК ИЗМЕНЕНО: В закладке "Отчеты по подгруппам" диалога выбора отчета
добавлена кнопка "Добавить FR-отчет [F7]". По этой кнопке для текущей FCOM
формы создается DataStream. После того как DataStream сформировался,
запускается дизайнер отчетов. Созданный отчет можно проверить предварительным
просмотром и сохранить в ресурс, задав имя отчета. Сохраненный FR-отчет можно в
дальнейшем запускать на выполнение. Для этого достаточно выбрать его из списка
диалога выбора отчетов. В текущей версии DataStream создается только для
отчетов с простой структурой потока данных (статическая часть, вертикальный
цикл).
Re: ORDER BY
Доброго времени суток. Не буду плодить темы, спрошу тут.
Почему-то долгое время работавший запрос теперь начал вызывать рантайм 216 системы. Путём экспериментов установил, что всё дело в описании сортировки в order by: если поля перечислены через "+" - всё, не прокатывает теперь. Вот, например:
Если написать order by katorg.nrec, katorg.name, то компилируется.
Такая же ситуация и с другими запросами. Это причуды 5.4.35?
Почему-то долгое время работавший запрос теперь начал вызывать рантайм 216 системы. Путём экспериментов установил, что всё дело в описании сортировки в order by: если поля перечислены через "+" - всё, не прокатывает теперь. Вот, например:
Код: Выделить всё
select katorg.name, katorg.nrec, x$users.xu$loginname, katorg.atl_lastdate
from katorg, katorgdescr, katorgdescr katorgdescr1, x$users
where
((
katorg.atl_lastuser /== x$users.atl_nrec and
katorg.nrec /== katorgdescr.crec and
katorgdescr.cgroup == katorgdescr1.nrec
))
order by katorg.nrec+katorg.name;
Такая же ситуация и с другими запросами. Это причуды 5.4.35?
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: ORDER BY
А где вы вообще синтаксис такой нашли через "+"? В документации ясно сказано, что перечисление полей через запятую
Re: ORDER BY
Ну дак, никто и не говорил, что нельзя писать например вVik писал(а):А где вы вообще синтаксис такой нашли через "+"? В документации ясно сказано, что перечисление полей через запятую
Код: Выделить всё
Select
katorg.nrec+katorg.name (FieldName=NrecName)
На 5.4.35.02 исправили
-
- Местный житель
- Сообщения: 370
- Зарегистрирован: 28 сен 2006, 15:43
- Откуда: Санкт-Петербург
- Контактная информация:
Re: ORDER BY
А, ну если задумано, что это вычисляемое поле, тогда ладно. Просто смысла что-то в этом не уловил
Re: ORDER BY
* ПРОБЛЕМА В ПИР: 103.5109
* ПЕРВОЕ РЕШЕНИЕ: NEW
* КРАТКОЕ ОПИСАНИЕ: Завал при выполнении запроса, если в Order by указать
вычисляемое поле
* ПРОЕКТ: Инструментарий прикладного программиста
* ДЕТАЛИЗАЦИЯ: Утилита UNI (DICOM,LOT)
# ЧТО ИЗМЕНЕНО:
Логические таблицы
----- ПРОЯВЛЕНИЕ ПРОБЛЕМЫ -----
Runtime error при выполнении запроса с сортировкой по вычисляемому полю.
# КАК ИЗМЕНЕНО: Исправлено.
Ged прав.
* ПЕРВОЕ РЕШЕНИЕ: NEW
* КРАТКОЕ ОПИСАНИЕ: Завал при выполнении запроса, если в Order by указать
вычисляемое поле
* ПРОЕКТ: Инструментарий прикладного программиста
* ДЕТАЛИЗАЦИЯ: Утилита UNI (DICOM,LOT)
# ЧТО ИЗМЕНЕНО:
Логические таблицы
----- ПРОЯВЛЕНИЕ ПРОБЛЕМЫ -----
Runtime error при выполнении запроса с сортировкой по вычисляемому полю.
# КАК ИЗМЕНЕНО: Исправлено.
Ged прав.