ВЫБЕРИТЕ из нескольких cte с условием динамического ГДЕ - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть хранимая процедура, которая возвращает список записей.

В одном случае (type = 1) будут возвращены первые 10 записей на основе номера страницы.

В другом случае (type = 2) будут возвращены все записи.

Выбранные столбцы одинаковы в обоих случаях.

Я использую 2 cte для получения требуемых данных.

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

План кодекса

with cte1 as 
(
    SELECT ....
),
cte2 as 
(
    SELECT ....
)
SELECT 
    ROW_NUMBER() OVER ( ORDER BY Col1) AS RowId,
    cte1.*, cte2.PlanName
FROM 
    cte1 
INNER JOIN
    cte2 ON cte2.Id = cte1.Id 
WHERE
    .....\*different code here*\

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Вы можете поставить условие WHERE, например where (RowId <=10 and @case=1) or @case=2

Ваш запрос должен выглядеть следующим образом.

SELECT * 
FROM   (SELECT Row_number() 
                 OVER ( 
                   ORDER BY col1) AS RowId, 
               cte1.*, 
               cte2.planname 
        FROM   cte1 
               INNER JOIN cte2 
                       ON cte2.id = cte1.id)t 
WHERE  ( rowid <= 10 
         AND @case = 1 ) 
        OR @case = 2 

Если код case=1 выше вернет только 10 строк на основеваш row_number() иначе он вернет все.

0 голосов
/ 18 февраля 2019

использование union all

with cte1 as (SELECT ....) ,

cte2 as (SELECT ....) select * from cte union all select * cte2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...