Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Хочется запрос без курсора. Кто нибудь поможет новичку?  [new]
Guest3
Guest
У меня имееются такие таблицы:

Table ED:
ID_B    T      ID_File

...
1 20 1
1 21 1
1 22 1
1 23 1
1 21 2
1 22 2
1 23 2
1 24 2
...

Table Bs:
ID_B      ID_P      ID_Bh

1 1 1
2 1 2
...

Нужно получить диапазон Т, в котором для каждого ID_File, соответствующего заданной комбинации ID_P и ID_Bh (например, 1 и 1) присутствует максимально возможное число строк с Т. Т.е. для приведенных таблиц нужный результат:

21 23

Я написал так:

DECLARE @idp int, @idb int, @idf int

SET @idp = 1
SET @idb = 1

CREATE TABLE #Tbs (Tmin int, Tmax int)

DECLARE idfs_Cursor CURSOR FOR
SELECT DISTINCT ID_File
FROM ED
WHERE ID_B IN ( SELECT ID_B FROM Bs WHERE ID_P = @idp AND ID_B = @idb )

OPEN idfs_Cursor

FETCH NEXT FROM idfs_Cursor INTO @idf
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO #Tbs SELECT min(T), max(T) FROM ED WHERE ID_File = @idf
FETCH NEXT FROM idfs_Cursor INTO @idf
END

CLOSE idfs_Cursor
DEALLOCATE idfs_Cursor

SELECT max(Tmin),min(Tmax) FROM #Tbs

DROP TABLE #Tbs


Но может можно обойтись без курсора? Жрать ведь будет время.
15 апр 03, 15:44    [175115]     Ответить | Цитировать Сообщить модератору
 Re: Хочется запрос без курсора. Кто нибудь поможет новичку?  [new]
YuriAM
Member

Откуда:
Сообщений: 829
Вникай, после используй !
DECLARE @idp int, @idb int, @idf int

SET @idp = 1
SET @idb = 1

CREATE TABLE #Tbs (Tmin int, Tmax int)

INSERT INTO #Tbs
SELECT min(ED.T),max(ED.T) FROM ED Join Bs On ED.ID_B = Bs.ID_B
WHERE Bs.ID_P = @idp AND Bs.ID_B = @idb
GROUP BY ID_FILE

SELECT max(Tmin),min(Tmax) FROM #Tbs

DROP TABLE #Tbs
15 апр 03, 17:04    [175256]     Ответить | Цитировать Сообщить модератору
 Re: Хочется запрос без курсора. Кто нибудь поможет новичку?  [new]
Guest3
Guest
Вник! Пошел использовать!
Спасибо!
15 апр 03, 17:24    [175291]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить