Можно ли использовать обобщенное табличное выражение (with as) дважды?
Всем привет!
Можно ли использовать 2 раза обобщенное табличное выражение? Если да, то как?
//выбираем только 20 строк с ... по ...
with DATAS as (select Id, Name, row_number() over (order by Id) RN from Country )
select * from DATAS where RN between 10 and 30
//считаем сколько всего записей
select count(*) from DATAS
Так как описано в примере нет. with связан со своим select.
1. Если запросы мудреные (групповые и по смыслу не связанные), то заранее создать temp таблицу с данными из with и производить выборку оттуда.
2. Конкретно пример из вопроса делается за 1 select, используя предложение OVER https://msdn.microsoft.com/ru-ru/library/ms175997(...
Denis Holub: да, я тоже не нашел вариантов с with.
На счет over - нет, не подходит, т.к. мы его как раз используем в with, чтобы выбрать не все данные, а только нужные диапазон.
#T тоже не подойдет, т.к. перегонка нескольких тысяч записей в #T будет занимать на много больше времени, чем получить через with нужный кусок и отдельно посчитать кол-во записей
Для более точного примера обновил sql в посте.
Нужно глянуть в документацию по t-sql
.... извлекается при выполнении простого запроса и определяется в области выполнения одиночной инструкции SELECT, INSERT, UPDATE или DELETE.....