imho.ws |
![]() |
![]() |
![]() |
# 1 |
Junior Member
Регистрация: 10.08.2003
Сообщения: 189
![]() ![]() ![]() ![]() |
Нумерация результата SQL-запроса
При создании SQL-запроса необходимо, чтобы добавлялась еще один столбец, в котором все записи будут пронумерованы по порядку (ну то бишь 1.2,3 etc). При этом нумерация должна происходить после упорядочивания результата (в смысле после ASC/DESC).
ЗЫ. Вообще работаю с Access'овской базой, но хотелось бы иметь универсальное решение ;) |
![]() |
![]() |
# 3 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Jinx
Универсальное решение - то, которое сказал RaZEr. Каждый сервер измывается над SQL как душа ляжет. Например, в Oracle требуемую тбой операцию можно было бы сделать так: Код:
SELECT F1, ROWNUM R FROM (SELECT FIELD1 F1 FROM TABLE1 ORDER BY 1);
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! Последний раз редактировалось Ghost; 22.04.2005 в 06:59. Причина: склероZzz... |
![]() |
![]() |
# 6 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Dolphin_spb
Или я ошибаюсь, или IDENTITY - автоинкрементируемое поле, а таким может быть только одно в таблице и оно должно быть ключом (непустым, есессно). Ключ заполняется автоматически, начиная от 1 и далее увеличиваясь на 1, при этом остается уникальным в пределах таблицы. Все это просто замечательно, но ключ не является _номером_ очередной записи в результате select-запроса. Т.е. если я вставлю в таблицу поля c, a, b (в таком порядке), то в таблице будут храниться записи: 1, c; 2, a; 3, b. И если я выполню запрос на сортированную по второму полю выборку, то получу: 2, a; 3, b; 1, c. Или я чего-то не понимаю?...
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! Последний раз редактировалось Ghost; 29.04.2005 в 12:12. Причина: чертов Сайгон... |
![]() |
![]() |
# 7 |
Junior Member
Регистрация: 13.09.2002
Адрес: Moscow
Сообщения: 110
![]() |
Все правильно. Только тебе сначала надо выполнить селект тех данных, которые надо пронумеровать, сделать инсерт в темповую таблицу, а потом сделать селект из этой таблицы на клиента. Двойная работа. В принципе, еще от клиента зависит. На Дельфях это делается элементарно calc-полем
Заполняться таблица должна в том же порядке, что и выдаваться потом. Человеку нужна нумерация строк его выборки, после всех сортировок и фильтраций |
![]() |
![]() |
# 8 |
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
S_Gur
Спасибо. Теперь дошло: всю выборку (ту, которую нужно пронумеровать) вставляем во временную таблицу (создав ее непосредственно перед этим) с дополнительным автоинкрементируемым полем, которое и станет при полной выборке из этой tmp-таблицы (select * from tmp_table) номером очередной строки. Оригинально. Работать будет. Только, действительно, несколько громоздко и, при больших объемах данных, тормозно.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! Последний раз редактировалось Ghost; 29.04.2005 в 12:27. Причина: чертов Сайгон... |
![]() |
![]() |
# 9 |
Junior Member
Регистрация: 13.09.2002
Адрес: Moscow
Сообщения: 110
![]() |
Универсальное решение - только на уровне клиента. Например, в Дельфях в классе TDataSet есть свойство RecNo. Делаешь вычисляемое поле - и все работает. С серверами сложнее, у каждой СУБД свое решение этой проблемы
|
![]() |
![]() |
# 10 |
Junior Member
Регистрация: 19.04.2002
Адрес: Дом
Пол: Male
Сообщения: 187
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ну вы тут и развели дебатов...
Как уже было сказано, самое лучшее - на уровне клиента. Это и бысрее и не привязано к конкретной реализации SQL. Временные таблицы это извращение. Мало того что у клиента будет тормозить, при достаточно большом объеме данных, так еще и сервер будет грузить попусту, если таких клиентов будет большое количество одновременно и + не универсально.
__________________
Дураки не динозавры - они не вымрут... |
![]() |