SELECT 来自具有动态 WHERE 条件的多个 cte
SELECT from multiple cte with dynamic WHERE condition
我有一个存储过程,其中 return 是一个记录列表。
在一种情况下 (type=1),这将 return 基于页码的前 10 条记录。
在其他情况下 (type=2),这将 return 所有记录。
两种情况下选择的列相同。
我正在使用 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*\
谢谢
使用union all
with cte1 as (SELECT ....) ,
cte2 as (SELECT ....) select * from cte union all select * cte2
您可以设置 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
以上代码将 return 只有 10 行基于你的 row_number()
否则它将 return 全部。
我有一个存储过程,其中 return 是一个记录列表。
在一种情况下 (type=1),这将 return 基于页码的前 10 条记录。
在其他情况下 (type=2),这将 return 所有记录。
两种情况下选择的列相同。
我正在使用 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*\
谢谢
使用union all
with cte1 as (SELECT ....) ,
cte2 as (SELECT ....) select * from cte union all select * cte2
您可以设置 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
以上代码将 return 只有 10 行基于你的 row_number()
否则它将 return 全部。