Счетчик через SQL запрос

bzum
Дата: 13.02.2003 16:48:34
Можно ли средствами sql написать счетчик , типа первая строка , вторая и так сколько строк в наборе такой и номер строки .
Я не думаю что такое возможно , но может кто подскажет
Именно одной инструкцией SQL .
Dim Grishin
Дата: 13.02.2003 17:10:02
в смысле пронумеровать?
StarWind
Дата: 14.02.2003 04:43:28
Смотря в какой базе в Oracle можно... там для этого есть псевдостолбец rownum
Jozo
Дата: 14.02.2003 07:09:36
А какую БД юзаеш ???
LexusR
Дата: 14.02.2003 07:22:48
если требуемый запрос отсортирован по какому-либо уникальному полю
то можно получить нумерацию таким образом

select T.*, (select count(P1.KeyField) from YourTable T1 where T1.KeyField < T.KeyField) as Number from YourTable T
order by T.KeyField
StarWind
Дата: 14.02.2003 08:30:20
И опять же не все базы даже такое поддержат....
kun
Дата: 19.02.2003 07:55:05
А в MS SQL Server такое возможно? Если возможно, то как?
ziktuw
Дата: 19.02.2003 10:24:44
Как указал LexusR.

Но на MSSQL можно сделать и более эффективное (по скорости исполнения) решение:

set nocount on

select identity(int,1,1) Number, * into #tmp from Table ..... order by ....
select * from #tmp order by Number
drop table #tmp
rock
Дата: 20.02.2003 06:49:11
Подскажите как такое сделать на Дельфи, например с помощью вычисляемых полей?
Пробовал так:
OnCalcField:
ADOQuery.FieldByName('RecNo'):=ADOQuery.RecNo;

но почему то первая строка равно -1... 8-(
Может элегантнее способ есть?
LexusR
Дата: 20.02.2003 07:11:58
Просто DataSet.Bof = true и поэтому для первой записи дает -1
(если потом проскролить вниз и вверх то -1 нормально отображается как 1)
поставь защиту от -1 и будет счастье

ADOQuery.FieldByName('RecNo').value := ADOQuery.RecNo;
if ADOQuery.FieldByName('RecNo').value = -1 then
ADOQuery.FieldByName('RecNo').value := 1;