powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как добавить поле автоматической нумерации в Select или таблицу
17 сообщений из 17, страница 1 из 1
Как добавить поле автоматической нумерации в Select или таблицу
    #32074367
Alex2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите кто-нидь. Можно ли как нибудь добавить поле в таблицу, вычисляемое поле, через функцию, либо просто поле в запрос Select-а , которое автоматически нумеровало бы полученный рекордсет в
ВНЕ зависимости от Order By. Например
Select ID,NAME...., [inumerator] from Table Order By NAME DESC
Где [inumerator] может быть всем чем угодно, функцией, вычисляемым полем etc Лишь бы он вовращал номер записи в текущем запросе.
Например получаем:
[ID], [NAME] ,[inumerator]
10 , Петя , 1
15 , Вася , 2
5 , Анна , 3
..................
Причем нумерация должна не повторяться и быть сквозная. Типа 1-я строка,2-я.
Вариант:

select [t1].[name], 'number' = 1 + isnull((select count(*) from [colors] [t2] where [t2].[name] < [t1].[name]), 0)from [colors] [t1] order by [name] asc

не подходит, так как он повторяет номера если поле Name дублируется.
Вожно ли в принципе такое. А то я уже думаю что нет.Pls, кто чем ... может.
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074377
Фотография Белов Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО я думаю так

select Num = identity(int, 1, 1), <your_field>.....
into #t1 from <your_table>
select * from #t1
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074381
kotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select identity (int,1,1),name
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074601
Alex2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Владимир я так сейчас и делаю. Хотелось бы избавиться от перелива данных во временную таблицы. Сейчас это самый большой тормоз у меня.
kotik - так не катит по синтаксиу.
IDENTITY (Function)
Is used only in a SELECT statement with an INTO table clause to insert an identity column into a new table.

Только если есть INTO :
Код: plaintext
select identity (int, 1 , 1 ),name Into #t1 from Table1

А это тоже самое, что я сейчас делаю. Я ищу способ не переливать данные.ИМХО наверное такого не существует.
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074619
av2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все-таки нумерацию лучше включать на клиенте
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074627
Bzzzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подобные вопросы подниаются еженедельно - см. ранее. ИМХО, #таблы с IDENTITY по времени не проигрывают др.способам, а текст упрощают значительно. И если заполнение темповой таблы идет слишком медленно - следует поискать в запросе - ну не должно очень сильно отличаться!
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074772
Alex2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я так и думал что если идешь в туалет по большому, то надо надуться, а иначе ничего не выйдет.
av2000 - мне нужно это не для вывода на клиент а для ограничения набора для постраничного листания под ASP.
Bzzzzz - идет медленно не потому что добавили поле IDENTITY, просто сама таблица большая, вернее запрос возвращает МНОГО-МНОГО записей, а мне нужно потом вытянуть какую-нидть 48 ю страницу на ASP.

Тогда вопрос по другому поставим. Можно ли как то вернуть записи с 50 по 100 например средствами SQL ? Как в MySQL, например:
Код: plaintext
Select * from TestTable LIMIT  5 , 10 

Что означает в MySQL возвратить 10 записей, начиная с 6. Есть только в MSSQL :
Код: plaintext
Select Top  10  * from   TestTable

а мне нужен горизонтальный срез для постраничного ASP листания. Вот и приходится извратом заниматься и переливать во временные таблицы свой запрос ТОЛЬКО ЛИШЬ для перенумерации, а только потом извлекать нужный горизонтальный срез. Первичный IDENTITY ключ таблицы не подходит так как используется Order By, да и "дырки" он имеет в следствие удаления записей в таблице.
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074786
av2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а paging для рекордсета разве не для этого?
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074793
Alex2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот мои "исследования"
Использование механизма листания в ADO для Recordset.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim i
Set oRset = Server.CreateObject( "ADODB.Recordset" )
strSQL =  "select * from TestTable" 
oRset.ActiveConnection  	=oConn
oRset.Source            	=strSQL
oRset.LockType          	=adLockReadOnly
oRset.CursorLocation    	=adUseClient
oRset.CursorType        	=adOpenForwardOnly
‘ Открыть рекордсет
oRset.Open
‘ Кол-во записей на странице
oRset.PageSize          	=  20 
‘ Сколько страниц выходит при этом
PageCount1              	=oRset.PageCount
‘ Отфильтровать рекордсет и вернуть только первую страницу
oRset.AbsolutePage    	= 1 
For i =  1  To  20 
   Response.Write(…. Здесь выводим данные страницы …..)
   oRset.MoveNext
Next

Как видно из примера в Recordset есть механизм листания довольно удобный. Но как всегда Microsoft его сделала через одно место. Все бы ничего, но такой вариант работает в ADO, ТОЛЬКО ЕСЛИ КУРСОР создается НА КЛИЕНТЕ:
oRset.CursorLocation =adUseClient
Отсюда вытекает, как только я делаю серверный курсор (кстати сказать, он является умолчаемым), то данный механизм листания не работает

‘ Листание не работает если курсор серверный
oRset.CursorLocation = adUseServer

Ты попробуй данный механизм на Select * from Table1 в которой ХОТЯ бы 100 тыс записей. Я пробовал - тормоз полный, так как весь рекордсет тащится на клиента (Web сервер в данном случае). Этот вариант сразу отпал. Причем финт с переливом во временную таблицу работает на порядок быстрее.Но тоже до определенного предела.
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074802
av2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а зачем выполнять запрос, который возвращает ВСЕ записи? Я обычно даю пользователю определить начальные условия поиска, скажем показать накладные за какой-то месяц или какого-то клиента за все время, после этого вызываю соотв. ХП, которая редко возвращает > 1000 записей, а после уже на веб-сервере включаю деление на страницы и отображаю одну из них.
все работает достаточно шустро
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074804
Dwarf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAQ посмотрите.
http://www.sql.ru/faq/faq_topic.aspx?fid=105
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074819
Alex2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
av2000 ты как всегда прав, но блин заманали заказчики. Это я понимаю что нужно ограничить набор как можно меньше, но заказчики хотят видеть все сразу не вводя никаких данных в фильтр. Требование, что бы и в туалет сходить и не надуться(sorry за повтор).


Dwarf - спасибо. В принципе идея переливать не ВСЮ таблицу а только ID записей не плоха. Но опять идет перелив во временную таблицу пускай из 2 полей но все равно. В принципе я уже сам дошел до этого метода. Но искал еще более лучшие решения. Кажись нашел. VVG_ подсказал классную идею:
------ paste ------------
select ProductID
from (Select top 10 ProductID, created
from (Select top 20 ProductID, created from Products
order by created desc ) as V1
order by created ) as V2
order by created desc

itаlic -поля отвечают за сортировку, bold - за страницу.

Только обязательно должны быть индексы по каждому из полей сортировки.
В данном случае это (Created,ProductID).
--------------------
Во это идея мне больше нравится.
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074828
av2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если хотят видеть как бы ВСЕ, то лучше сделай допустим
SELECT TOP 5000 ...
100% ни у кого терпения не хватит пролистать ВСЕ страницы (скажем по 50 записей) и народ станет вводить параметры поиска
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074830
Alex2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У буржуев хватает как ни странно терпения, кроме того там недалекие юзера сидят. Это наш русский на 10 раз поймет что можно и фильтр заполнить, а у них при 90-100 килобайт в сек прокачки по Интернету не всегда
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074833
av2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если хитрый юзер перескочит сразу на последнюю страницу, то в конце нумерации страниц сделаем ссылочку "далее", которая передаст в качестве параметра последний отображенный id и дадим ему еще порцию:
SELECT top 5000 ... WHERE id NOT IN (select top 5000...)
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074837
av2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прикол по теме (реально услышанный разговор на радиорынке):
- у вас есть автомобильные радиосигнализации?
- да, вот модель сигнализирует вам на расстоянии до 200 метров
- а побольше?
- есть модель до 1 км.
- а еще больше, километров на 10?
- есть и такая, но учтите: БЕЖАТЬ ПРИДЕТСЯ ВАМ...
занавес
...
Рейтинг: 0 / 0
Как добавить поле автоматической нумерации в Select или таблицу
    #32074839
Alex2002
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:) Я все понял. Пускай побегают у них ноги длинные.
Спасибо. Пора закрывать тему, тем более что ответ найден.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как добавить поле автоматической нумерации в Select или таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]