我正在运行SQL Server 2016 Management Studio。目前我有以下子查询结构
WITH x_1 AS
(SELECT
-- Code A here --
column_1
-- Code B here --
),
x_2 AS
(SELECT
-- Code A here --
column_2
-- Code B here --
)
SELECT
-- Rest of the code --
基本上我正在为两个子查询执行相同的代码片段("代码A和#34;以及"代码B"),除了对两者之间的不同列的引用。为了避免不必要的重复,在其他编程语言中我可以例如按照以下伪代码片段的行做一些事情
varnames = ["x_1", "x_2"]
colnames = ["col_1", "col_2"]
for (i in 1:2){
eval(varnames[i]) = function(name = colnames[i]){Code A, eval(name), Code B}
}
即,遍历代码块两次并动态评估变量和列名称。不幸的是,我不知道如何在SQL中执行此操作。有什么想法可以实现吗?这种方法在SQL中是否有意义,或者是否有更合适的方法来实现相同的结果?
答案 0 :(得分:1)
循环方法在SQL中没有意义,因为基于集合的方法总是表现得更好。
在不知道“代码A”和“代码B”究竟是什么的情况下,很难以100%的信心建议一个理想的解决方案。但是,除了一列之外,我建议将两个CTE组合成一个CTE,其中包含两个列,或者如果两个列共享相同的别名,则使用CASE表达式使用{{适用于额外列的1}},否则为column_1
。