Если Вы хотите избежать путаницы оператора выбора, находящегося в Вашем запросе дважды, можно хотеть поместить его в Пользовательскую Функцию.
Извините, но SQL Server не представил бы набор данных перед Группой пунктом, таким образом, псевдоним столбца не доступен. Вы могли использовать его в Порядке.
Вам нужно будет попросить администратора базы данных изменить хранимую процедуру.
Вы можете изменить ее, чтобы выбрать результаты во временную таблицу оценки, а не в простой выбор, и затем вы можете написать свой собственный выбор в этой временной таблице, чтобы возвращать только нужные строки
Насколько мне известно, в Sybase ASE это невозможно. Даже использование
insert #temp_table
exec my_procedure
не работает (по крайней мере, на sybase 12.x).
Это возможно с ASE, но довольно окольным путем, используя Таблицы CIS и прокси. Этот механизм очень хорошо описан на сайте Роба Верчура:
http://www.sypron.nl/proctab.html
Я попробовал его однажды из любопытства, и он действительно работает. Я не стал вдаваться в сложный вопрос обработки ошибок.
pjjH
В Sybase IQ (не менее 12.6 и выше) вы можете выбирать из хранимой процедуры и фильтровать результаты, как если бы это была таблица. Я не знаю, работает ли это в ASE или ASA, но вы можете попробовать.
Итак, если ваша хранимая процедура называется myproc, в наборе результатов есть столбец ACTIVE, который может быть 0 или 1, и вы хотите выбрать только строки ACTIVE = 1 вы могли это сделать.
SELECT * FROM myproc () WHERE ACTIVE = 1
В IQ вы также можете использовать это как производную таблицу и СОЕДИНЯТЬ ее с другими таблицами, например, как эта .. .
ВЫБРАТЬ t1.name, t1.address, t2, active ОТ tbl_atable t1, (ВЫБРАТЬ * ИЗ myproc () ГДЕ АКТИВНЫЙ = 1) t2 WHERE t1.active = t2.active
... это довольно неплохо!
Я надеюсь, что это работает для любой версии Sybase, которую вы используете.