Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.28;
Скачать: CL | DM;

Вниз

счетчик в запросе   Найти похожие ветки 

 
Е-Моё имя ©   (2003-07-10 12:32) [0]

Можно ли сделать такой запрос, чтобы в одном из полей лежали значения счетчика
то есть
запрос select A from B дает
_аа
_пп
_рр

а мне хочецца
_аа S+1
_пп S+2
_рр S+3

S в приципе можно и 0

такое реально сделать?
MS SQL 8


 
Andryk ©   (2003-07-10 12:39) [1]

Не знаю как в MS SQL, а в Oracle есть зарезервированное слово rownum, которое и показывает номер строчки. Наверняка MS SQL должно быть что-то похожее.


 
Nikolay M. ©   (2003-07-10 12:45) [2]

Через ХП?
FOR EACH или FOR SELECT, не помню, как там в MS SQL...


 
Е-Моё имя ©   (2003-07-10 12:56) [3]


> Andryk © (10.07.03 12:39)

чо-то не могу найти ничо похожего(((((


> Nikolay M. © (10.07.03 12:45)

тоже нет ничо


 
Карелин Артем ©   (2003-07-10 13:02) [4]

Не знаю как в M$ SQL, а в FireBird это делается так:
CREATE PROCEDURE MSS_S
RETURNS (
C1 INTEGER)
AS
declare variable e integer;
BEGIN
e=0;
FOR SELECT iD
FROM MSS
INTO :c1
DO
BEGIN
e=:e+1;
c1=:c1+:e;
SUSPEND;
END
END


 
kaif ©   (2003-07-10 13:03) [5]

Я делаю проще.
Добавляю в DataSet вычисляемое поле N
В обработчик OnCalcFields вписываю:
with DataSet do FieldByName("N").AsInteger := RecNo;
И потом использую это значение как угодно.
Незачем по сети загромождать набор информацией, которая и так присуствует в виде номера строки возвращаемого набора как такового.


 
Nikolay M. ©   (2003-07-10 13:07) [6]


> В обработчик OnCalcFields вписываю:
> with DataSet do FieldByName("N").AsInteger := RecNo;

Нигде не сказано, что RecNo будет отлично от -1.


 
Е-Моё имя ©   (2003-07-10 13:07) [7]


> kaif © (10.07.03 13:03)


> которая и так присуствует в виде номера строки

где?! ткни пальцем, где в рекордсете лежит номер строки?


 
Mike1 Kouzmine1   (2003-07-10 13:09) [8]

kaif © (10.07.03 13:03) Не всегда работает.
Пример: запрос (не локал), фильтрованный набор данных.


 
Е-Моё имя ©   (2003-07-10 13:09) [9]


> kaif © (10.07.03 13:03)

и еще-нет никаких обработчиков OnCalcFields, OnAttemptToFuckMyBrain or smth
есть код ХП


 
kaif ©   (2003-07-10 13:17) [10]

Е-Моё имя © (10.07.03 13:07)

> kaif © (10.07.03 13:03)
> которая и так присуствует в виде номера строки
>где?! ткни пальцем, где в рекордсете лежит номер строки?

Информация присуствует не значит, что она где-то лежит в удобной форме. Я имею в виду следующее. Если в наборе 5 строк, то само это количество - тоже информация. Даже если все 5 строк заполнены одними NULL.

>и еще-нет никаких обработчиков OnCalcFields, >OnAttemptToFuckMyBrain or smth
>есть код ХП

Если приспичило, то IB я бы сделал так:

CREATE PROCEDURE THIS_IS_NOT_ATTEMPT_TO_FUCK_ANY_BRAIN
RETURNS(N INTEGER, ....)
AS
BEGIN
N = 0;
FOR SELECT ... FROM ...
INTO ...
DO
BEGIN
N = N + 1;
SUSPEND;
END
END

И дальше юзал бы

SELECT * FROM THIS_IS_NOT_ATTEMPT_TO_FUCK_ANY_BRAIN;
----------------
А в MSSQL и ORACLE есть специальные средства для такой цели, но я обычно не помню того, что можно всегда найти в руководстве по этим серверам.


 
Е-Моё имя ©   (2003-07-10 13:20) [11]


> kaif © (10.07.03 13:17)

имхо, приведенный код процедуры считает количество записей
а нужно то же, что привел > Карелин Артем © (10.07.03 13:02)/I>, только средствами MSSQL


 
Zz_   (2003-07-10 13:27) [12]

http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=3903


 
kaif ©   (2003-07-10 13:28) [13]

2 Е-Моё имя © (10.07.03 13:20)

Да, извиняюсь, я прозевал ответ

Карелин Артем © (10.07.03 13:02)

Иначе я бы не приводил свой код. По сути это тот же принцип, просто у него точное решение именно твоей задачи (прибавлять к значению выбираемого поля, а не возвращать отдельным полем)

В MSSQL, помнится была какая-то переменная для этой цели. Лучше эту ветку перенести в раздел "Базы данных". Там тебе сразу ответят. Я с MSSQL не работал уже лет 5.


 
Е-Моё имя ©   (2003-07-10 14:04) [14]


> Лучше эту ветку перенести в раздел "Базы данных".

последние дни весь движняк в "потрепаться")))) имхо

> Zz_ (10.07.03 13:27)

спасибо!


 
АлексейК   (2003-07-10 14:10) [15]

Можно, но не совсем красиво. Хотя если выборка хранимой процедурой то ничего.
SELECT IDENTITY(INT, 1, 1) AS ID_PREC, FIELD_1, .... FIELD_N
INTO [#new_table][##new_table][new_table]
FROM Old_table
SELECT * FROM [#new_table][##new_table][new_table]



 
Е-Моё имя ©   (2003-07-10 14:19) [16]

сделал примерно так:
select A, 1 as B
into #tmp
from C

select @counter=5000
update #tmp set @counter=B=@counter+1

select * from #tmp

drop table #tmp

все, всем спасибо ;)



Страницы: 1 вся ветка

Текущий архив: 2003.07.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
14-91854
Soft
2003-07-11 11:38
2003.07.28
Как сойти с ума, программируя на Делфи?


9-91614
Antichacker
2003-02-04 19:02
2003.07.28
Прозрачные спрайты. Возможно ли это?


4-91950
PashaIv
2003-05-25 22:16
2003.07.28
---|Ветка была без названия|---


4-91956
kawner
2003-05-23 17:28
2003.07.28
сервис


14-91813
m_a_r_t
2003-07-12 03:59
2003.07.28
Какой сервер в инете обеспечивает наилучший халявный хостинг?