Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 вывести запрос без нескольких первых записей  [new]
Beaver_lg
Member

Откуда:
Сообщений: 75
Необходимо при формирования отчета вывести первые десят строк представления v_nakl на первую страницу отчета, а остальные если есть будут выводиться со второй страницы.

Отчет формируется посредством Delphi заданием запроса:
SELECT * FROM v_nakl WHERE 'номер накладной'=456214 (возможно ошибки в запросе, но выглядит примерно так).
Из этого запроса беруться первые десять записей, путем настройки отчета.
а вот как вывести остальные записи без дублирования выведенных?
13 май 07, 21:19    [4131327]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
А у Вас моут быть несколько накладных с одинаковым номером???

--------------------------------
Вся жизнь -ништяк, все бабы -леди,а солнце -шар дающий свет.
13 май 07, 21:51    [4131372]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116217
А по какому критерию Вы выбираете первые 10 записей ?
13 май 07, 22:19    [4131430]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
Beaver_lg
Member

Откуда:
Сообщений: 75
pravednik
А у Вас моут быть несколько накладных с одинаковым номером???

нет, но данные о клиенте находятся в одной таблице, а товары для него в другой. связь по номеру накладной.
13 май 07, 22:55    [4131525]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
Beaver_lg
Member

Откуда:
Сообщений: 75
dmidek
А по какому критерию Вы выбираете первые 10 записей ?

10 записей это примерно, чтоб поместилось не первом листе отчета вместе с данными о клиенте.
отчет имеет такую структуру:
1ый лист - Таблица с товарами (10 товаров) в верхней части листа
под таблицей с товарами находятся данные о клиенте
2ой лист - продолжение таблицы с товарами начатой на первом листе, т.е. таблица с товарами разрывается сведениями о клиенте.

На мой взгляд структура отчета перевернутая какая то, но это все зависит от финансистов, бухгалтеров (они так привыкли работать) и от постановщиков.
13 май 07, 23:14    [4131576]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116217
Beaver_lg
dmidek
А по какому критерию Вы выбираете первые 10 записей ?

10 записей это примерно, чтоб поместилось не первом листе отчета вместе с данными о клиенте.
отчет имеет такую структуру:
1ый лист - Таблица с товарами (10 товаров) в верхней части листа
под таблицей с товарами находятся данные о клиенте
2ой лист - продолжение таблицы с товарами начатой на первом листе, т.е. таблица с товарами разрывается сведениями о клиенте.

На мой взгляд структура отчета перевернутая какая то, но это все зависит от финансистов, бухгалтеров (они так привыкли работать) и от постановщиков.


Я не совсем о том спросил.
Вот Вы пишите "10 товаров". А какие это 10 товаров ?
Варианты ответов "10 самых старых товаров", "10 товаров с минимальной стоимостью"
"10 товаров, выбранных случайным образом" aka "просто 10 товаров" :-) .

От ответа на этот вопрос зависит решение, которое может быть Вам предложено.
13 май 07, 23:15    [4131580]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
db-man
Guest
Из этого запроса беруться первые десять записей, путем настройки отчета.

Тогда ищите настройки, чтобы остальные записи выводились на второй странице.

Если так сделать невозможно, то выводите на первой странице результат запроса:

select *
from (
  SELECT *
  FROM v_nakl
  WHERE 'номер накладной'=456214
  ORDER BY some_field
)
where rownum <= 10

а на второй:

select * from (
  select v.*, rownum rn
  from (
    SELECT *
    FROM v_nakl
    WHERE 'номер накладной'=456214
    ORDER BY some_field
  ) v
) where rn > 10

А вообще, в дизайнере репортов должен быть символ разбиения страницы и что-то навроде триггера на него. В триггере ставите условие чтобы элемент выводился, когда некий глобальный счётчик записей становится = 10. И всё. Но как сделано в дельфи - хз.
13 май 07, 23:34    [4131637]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
Beaver_lg
Member

Откуда:
Сообщений: 75

Я не совсем о том спросил.
Вот Вы пишите "10 товаров". А какие это 10 товаров ?
Варианты ответов "10 самых старых товаров", "10 товаров с минимальной стоимостью"
"10 товаров, выбранных случайным образом" aka "просто 10 товаров" :-) .

От ответа на этот вопрос зависит решение, которое может быть Вам предложено.

наверно "просто десять товаров", в отчете выводятся товары заказанные одним клиентом в один и тот же день
например приходит клиент и заказывает: товар1, товар2, ..., товар25
печатаем отчет:
накладная № NNNN
Товар1
Товар2
...
Товар10
Данные и реквизиты клиента
(страница закончилась)
лист №2
Товар11
...
Товар25
13 май 07, 23:39    [4131662]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
NF
Member

Откуда:
Сообщений: 100
select * from v_nakl where rownum<=10
select * from v_nakl where rownum>10
13 май 07, 23:43    [4131678]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116217
Beaver_lg

Я не совсем о том спросил.
Вот Вы пишите "10 товаров". А какие это 10 товаров ?
Варианты ответов "10 самых старых товаров", "10 товаров с минимальной стоимостью"
"10 товаров, выбранных случайным образом" aka "просто 10 товаров" :-) .

От ответа на этот вопрос зависит решение, которое может быть Вам предложено.

наверно "просто десять товаров", в отчете выводятся товары заказанные одним клиентом в один и тот же день
например приходит клиент и заказывает: товар1, товар2, ..., товар25
печатаем отчет:
накладная № NNNN
Товар1
Товар2
...
Товар10
Данные и реквизиты клиента
(страница закончилась)
лист №2
Товар11
...
Товар25


Если все равно как выводить, то самое простое - выбрать какой- то
критерий сортировки (все равно) и сводить к варианту db-man.
Иначе нельзя обеспечить устойчивую последовательность
вывода по rownum.

NF
select * from v_nakl where rownum<=10
select * from v_nakl where rownum>10


Тяжелый случай ...
13 май 07, 23:47    [4131692]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
........
Guest
2 NF:

Прежде чем что-либо публиковать, надо хотя бы проверить, работает ли оно.
14 май 07, 00:47    [4131853]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
DDL
Member

Откуда: Москва
Сообщений: 58
Можно и без сортировки:
первый запрос:

SELECT *
  FROM v_nakl
  WHERE 'номер накладной'=456214
  AND rownum <= 10

второй
SELECT *
  FROM v_nakl
  WHERE 'номер накладной'=456214
MINUS
SELECT *
  FROM v_nakl
  WHERE 'номер накладной'=456214
  AND rownum <= 10
14 май 07, 10:48    [4132706]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
DDL
Можно и без сортировки
Можно, конечно, но лучше не надо :))
dmidek
Иначе нельзя обеспечить устойчивую последовательность вывода по rownum.
14 май 07, 11:08    [4132860]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
DDL
Member

Откуда: Москва
Сообщений: 58
Jannny
DDL
Можно и без сортировки
Можно, конечно, но лучше не надо :))
dmidek
Иначе нельзя обеспечить устойчивую последовательность вывода по rownum.

Если Вы про возможное мутирование, то этого можно избежать - добавить for update в первом запросе.
14 май 07, 11:21    [4132976]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
db-man
Guest
Если Вы про возможное мутирование, то этого можно избежать - добавить for update в первом запросе.

Нобелефку!!!
14 май 07, 11:23    [4132994]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116217
DDL
Jannny
DDL
Можно и без сортировки
Можно, конечно, но лучше не надо :))
dmidek
Иначе нельзя обеспечить устойчивую последовательность вывода по rownum.

Если Вы про возможное мутирование, то этого можно избежать - добавить for update в первом запросе.


Нет, мы не про мутирование :-)
14 май 07, 11:24    [4132995]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
NF
Member

Откуда:
Сообщений: 100
dmidek,
а так же безымянный автор вот этого:
........
2 NF:

Прежде чем что-либо публиковать, надо хотя бы проверить, работает ли оно.



Сначала прочите условие

Необходимо при формирования отчета вывести первые десят строк представления v_nakl


А потом сами проверте мой код.
Или может вы думали, что этот код сразу печатает нужный отчет? :)

Тяжелый случай.
14 май 07, 12:48    [4133500]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
моховик
Guest
Beaver_lg
Необходимо при формирования отчета вывести первые десят строк представления v_nakl на первую страницу отчета, а остальные если есть будут выводиться со второй страницы.

Отчет формируется посредством Delphi заданием запроса:
SELECT * FROM v_nakl WHERE 'номер накладной'=456214 (возможно ошибки в запросе, но выглядит примерно так).
Из этого запроса беруться первые десять записей, путем настройки отчета.
а вот как вывести остальные записи без дублирования выведенных?

мимо
это не вопрос к ораклу, это вопрос к делфи: шаблоны отчетов
14 май 07, 12:51    [4133529]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116217
NF
dmidek,
а так же безымянный автор вот этого:
........
2 NF:

Прежде чем что-либо публиковать, надо хотя бы проверить, работает ли оно.



Сначала прочите условие

Необходимо при формирования отчета вывести первые десят строк представления v_nakl


А потом сами проверте мой код.
Или может вы думали, что этот код сразу печатает нужный отчет? :)

Тяжелый случай.


Напрасно упорствуете. Намекну

select * from v_nakl where rownum>10

никогда ничего не вернет.
Лучше не упорствуйте в невежестве , а чего- нибудь почитайте ...
14 май 07, 12:57    [4133570]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
Elic
Member

Откуда:
Сообщений: 29988
NF
Сначала прочите условие
А потом сами проверте мой код.
Не усугубляй свой позор
NF
Тяжелый случай.
И не говори
14 май 07, 13:01    [4133598]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
Alex_IZA
Member

Откуда:
Сообщений: 287
Почему бы не почитать FAQ про постраничный вывод?
https://www.sql.ru/faq/faq_topic.aspx?fid=105
14 май 07, 13:55    [4134002]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
Мнениё
Guest
NF
select * from v_nakl where rownum<=10
select * from v_nakl where rownum>10


Позор на все джунгли ...
14 май 07, 13:59    [4134027]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
NF
Member

Откуда:
Сообщений: 100
почему нет красного смайла?
14 май 07, 14:57    [4134463]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
Stax..
Guest
Мнениё
NF
select * from v_nakl where rownum<=10
select * from v_nakl where rownum>10


Позор на все джунгли ...

ошибси человек, так что ж теперь всеми джунглями его травить
мож он кавычки забыл
SQL> select * from tv where "ROWNUM">1;

       ID N             ROWNUM
--------- ---------- ---------
        2 2                  2
по теме
если всетаки два запроса то я б поставил что-то set transection read only
.....
stax
14 май 07, 22:10    [4136391]     Ответить | Цитировать Сообщить модератору
 Re: вывести запрос без нескольких первых записей  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Beaver_lg
Необходимо при формирования отчета вывести первые десят строк представления v_nakl на первую страницу отчета, а остальные если есть будут выводиться со второй страницы.

Отчет формируется посредством Delphi заданием запроса:
SELECT * FROM v_nakl WHERE 'номер накладной'=456214 (возможно ошибки в запросе, но выглядит примерно так).
Из этого запроса беруться первые десять записей, путем настройки отчета.
а вот как вывести остальные записи без дублирования выведенных?


Обратись на форум Delphi.
ИМХО, нужно особо описать первую страницу отчета, чтобы на ней выводились 10 строк запроса и заголовок отчёта. Остальные строки отчёта пойдут на следующие страницы.
Вариантов формирования заголовка отчёта несколько. Это может быть и специальный компонент-заголовок и увеличенный подвал первой страницы.
14 май 07, 22:26    [4136417]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить