2017-07-24 101 views
1

我正在运行SQL Server 2016 Management Studio。目前,我有以下子查询的结构SQL动态子查询

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”和“代码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中,该两个CTE中都有两列,或者如果两列共享相同的别名,则使用CASE表达式使用column_1适用于额外的列,否则为column_2