Вывод порядковой нумерации в запросе.
Вывод порядковой нумерации в запросе.
Уважаемые Гуру!
Подскажите как сделать в выборке по запросу (FireBird, FIB+, Delphi 7), чтобы показывался порядковый номер записи в выборке в виде отдельной колонки.
Т.е. если в результирующей выборке будет 10 записей, то нумерация должна быть от 1 до 10.
Спасибо.
Подскажите как сделать в выборке по запросу (FireBird, FIB+, Delphi 7), чтобы показывался порядковый номер записи в выборке в виде отдельной колонки.
Т.е. если в результирующей выборке будет 10 записей, то нумерация должна быть от 1 до 10.
Спасибо.
Re: Вывод порядковой нумерации в запросе.
А не проще такое на клиенте сделать, чтобы сервер меньше напрягать?Vladgul писал(а):Уважаемые Гуру!
Т.е. если в результирующей выборке будет 10 записей, то нумерация должна быть от 1 до 10.
Спасибо.
Ога. И не забыть про ES. Типаmdfv писал(а):Если ФБ 2.хх то можно ч-з execute block
Код: Выделить всё
execute block returns (seq_num int, val int)
as begin
seq_num = 0;
for execute statement 'select ' || :seq_num+1 || ', val from ... '
into seq_num, val
do suspend;
end
Merlin писал(а):Ахренеть. Дайте две. Проперть RecNo чем не устроила?
Это все случаи когда можно все жестко прописать на клиенте. А когда заранее клиент не подготовлен, то проще с сервера вытянуть то что надо.вот именно. поскольку серверу нумерация записей по барабану, тем более что она может меняться, обычно ЭТО выводят именно на клиенте.
Например у меня отчеты в виде таблицы с несколькими разными данными один под другим уютно расположились и пронумеровались каждый с 1 по порядку.
Это вы так оправдываете свое вынужденное сидение на старом добром 1.0.3.Ога. И не забыть про ES. Типа
Может в далеком будущемPS. Жаль, что так не сработает
можно будет писать.....
Код: Выделить всё
select counter(from 1 step 10) from ...
Датасет просто существует и ест то что ему дадут, а дать могут все что угодно, и для этого надо тогда заранее наворачивать датасет, облеплять его всякими угадалками. Но проще все сделать в запросе, а не придумывать все на все случаи жизни.Merlin писал(а):Чо? Не подготовлен - в смысле никогда не нажимал кнопочку ФЫ1 на датасете и не читал всплывающих букавак?
У меня в программе датасетов, в которых статично прописано что и как они должны делать и в каком виде, меньшинство, остальные кушают запросы динамически и не знают заранее что там внутри и что с этим делать.
Отчеты бывают всякие и нумерация бывает так же нестандартная.
Как я привел пример, две таблицы в одном отчете. И тут надо городить уже сложный отчетник. Но если мне это не надо. А просто нужна нумерация. То серверная нумерация это самый простой способ. У меня в отчетнике всего несколько страниц текста, написанных за несколько минут, и этого вполне хватает, все остальное формируется на сервере. И получаются произвольные отчеты на любой вкус, с нумерацией хоть с конца хоть с начала.
Как я привел пример, две таблицы в одном отчете. И тут надо городить уже сложный отчетник. Но если мне это не надо. А просто нужна нумерация. То серверная нумерация это самый простой способ. У меня в отчетнике всего несколько страниц текста, написанных за несколько минут, и этого вполне хватает, все остальное формируется на сервере. И получаются произвольные отчеты на любой вкус, с нумерацией хоть с конца хоть с начала.
Вот именно так и получается с отчётником (читай "с нумерацией на клиенте"). Как хочешь, так и нумеруешь.mdfv писал(а):И получаются произвольные отчеты на любой вкус, с нумерацией хоть с конца хоть с начала.
А процедура выдаёт данные, которые ты ещё десять раз перевернёшь и сгруппируешь на клиенте. И если в твоём частном случае это не так - не значит, что по-другому не бывает.
Наверное, можно придумать ситуации, когда нумерация на сервере нужна. Я даже знаю сходу такие.
Но обсуждаемый случай под таковые не попадает.
Этот вариант зависим от порядка выполнения операторов в запросе, а потому не гарантирован в другой версии, надо будет перепроверять и возможно изменять порядок.Attid писал(а):кста тут или на sql_ru был еще вариант с RDB$SET_CONTEXT.
Хм. Интересно, а счётчик можно сбросить без заведения нового логина? А то что-то сильно умным начинаю выглядеть.Attid писал(а):ЗЫ WildSery с 1000 сообщением тебя
Насколько я понимаю, человеку нужно вот это:
взято отсюда
Код: Выделить всё
/* способ №2 стандартный SQL */
select count (test_2.id_test) as rank, test_1.id_test, test_1.string
from test as test_1 inner join test as test_2 on
test_1.id_test >= test_2.id_test
group by test_1.id_test, test_1.string
order by rank
/* способ №3 стандартный SQL */
select test_3.rank, test_3.id_test, test_3.string
from (select test_1.id_test,
test_1.string,
(select count(*)
from test as test_2
where test_2.id_test <= test_1.id_test
) as rank
from test as test_1) as test_3
order by rank