Форум: "Потрепаться";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
Внизсчетчик в запросе Найти похожие ветки
← →
Е-Моё имя (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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c