【发布时间】:2014-03-13 13:00:39
【问题描述】:
您好,我有一个带有 5 个内部连接的 CTE 和一个减一的 where 子句。 示例代码如下所示。但实际代码逻辑更复杂
;With CTE_EG AS
(
select *,
-1 as offset from a
inner join a1 on a1.id=a.id
inner join a2 on a1.id=a2.id
inner join a3 on a1.id=a3.id
where a1.offset = a2.quarter-1
union all
select *,
-2 as offset from a
inner join a1 on a1.id=a.id
inner join a2 on a1.id=a2.id
inner join a3 on a1.id=a3.id
where a1.offset = a2.quarter-2
union all
...
)
这会重复直到偏移量 -4 和 a1.offset = a2.quarter-4。 我怎样才能避免只为一个 where 子句值重复相同的代码很多次。实际上查询有 5 个内部连接,总共有 5 个联合。 我不能全部删除联合,因为这会产生一些计算差异。 我想要类似当我们传递一个整数值 n 时,联合之间的选择都应该随着改变 where 子句(如 a1.offset = a2.quarter-2 到 a1.offset = a2.quarter-n)而重复 请推荐
【问题讨论】:
标签: sql-server-2008-r2 where-clause common-table-expression union-all