Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
7-91934
Delphilover
2003-05-18 08:35
2003.07.28
Консоль


14-91908
Юрий Зотов
2003-07-12 13:25
2003.07.28
Соотношение валют в Украине


3-91628
HardClubber
2003-07-03 20:18
2003.07.28
Добавление и удаление записи


7-91920
kravchuk
2003-05-15 15:42
2003.07.28
Dispatch_Level


3-91629
DBDev
2003-07-04 10:27
2003.07.28
Кто-нибудь юзал TADOQuery::OnFetchProgress??? Поделитесь ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский