ВЫБЕРИТЕ из нескольких cte с условием динамического ГДЕ
У меня есть хранимая процедура, которая возвращает список записей.
В одном случае (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 ответа
Решение
Вы можете положить 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()
иначе это вернет все.
Использование union all
with cte1 as (SELECT ....) ,
cte2 as (SELECT ....) select * from cte union all select * cte2