SQL动态子查询

时间:2017-07-24 14:23:35

标签: sql-server dynamic subquery

我正在运行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中是否有意义,或者是否有更合适的方法来实现相同的结果?

1 个答案:

答案 0 :(得分:1)

循环方法在SQL中没有意义,因为基于集合的方法总是表现得更好。

在不知道“代码A”和“代码B”究竟是什么的情况下,很难以100%的信心建议一个理想的解决方案。但是,除了一列之外,我建议将两个CTE组合成一个CTE,其中包含两个列,或者如果两个列共享相同的别名,则使用CASE表达式使用{{适用于额外列的1}},否则为column_1