Использование вывода из «с как» несколько раз - PullRequest
4 голосов
/ 18 марта 2011

Я не могу использовать т с

with t as (
        select row_number() OVER (partition by ID ORDER BY id) as numb, * 
        from my_table
        where id= 6
    )

select top 2 from t # it works
select top 2 from t # here I get error Invalid object name 't'.

Есть ли какой-нибудь совет, чтобы использовать т больше, чем вовремя?

Ответы [ 3 ]

4 голосов
/ 18 марта 2011

Вы не можете сделать это. CTE могут использоваться только в одном операторе (хотя вы можете использовать его несколько раз в одном операторе.

Взгляните на эту статью . Snippit:

Как только CTE определен, он может быть ссылается несколько раз первым запрос, следующий за ним.

А из их документация :

Общее табличное выражение (CTE) может быть считается временным результатом это определено в исполнении объем одного SELECT, INSERT, ОБНОВЛЕНИЕ, УДАЛЕНИЕ или СОЗДАНИЕ ВИДА заявление.

Акцент на "область действия одного оператора SELECT, INSERT, UPDATE, DELETE или CREATE VIEW."

1 голос
/ 18 марта 2011

Есть ли какой-нибудь совет использовать t больше, чем вовремя?

Конечно, если вы делаете это в хранимом процессе, просто сбросьте его в таблицу #temp.В конце сохраненного процесса таблица #temp исчезнет.

with t as (
        select row_number() OVER (partition by ID ORDER BY id) as numb, * 
        from my_table
        where id= 6
    )
select * into #tmp from t

select top 2 from #tmp -- good
select top 2 from #tmp -- good also

Вне SP, просто убедитесь, что вы сбросили таблицу # перед тем, как попытаться создать ее снова, в противном случае следующая select ..into #name будетошибка с #name already exists

0 голосов
/ 18 марта 2011

Вы можете использовать CTE только в одном запросе, который следует за CTE. Однако вы можете сделать следующий запрос настолько сложным, насколько пожелаете.

В вашем примере вы могли бы рассмотреть объединение между двумя выборами в зависимости от того, что именно вы хотите. Код, который вы дали, не достаточно описателен, чтобы я мог предложить другие варианты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...