sql 语句中的 Cfloop?

Cfloop in sql statement?

我想知道是否可以在 sql 语句中循环。就我而言,我为测试目的创建了两年。现在我想动态创建年份,因为我可以有两个以上的记录。这是我用于测试目的的代码:

Select sum(case when quarter = '2015' then 1 else 0 end) as year2015,
       sum(case when quarter = '2016' then 1 else 0 end) as year2016
From testTable

现在我有 cfloop,它给出了 2015 年、2016 年、2017 年... 所以我尝试了类似的方法,但没有用:

Select 
      <cfloop from="#startYear#" to="#endYear#" step="1" index="i">
            sum(case when quarter = i then 1 else 0 end) as CONCAT('year',i)
      </cfloop>
From testTable

错误信息:

[Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near 'year'.

我不确定这是否是最好的方法,如果有人可以帮助请告诉我。

请记住,您生成的 SQL 字符串必须有效。 CF 变量需要在您的 case 语句中传入。

<cfquery name="foo" datasource="xxx">
    SELECT  1 AS placeholder
            <cfloop from="#startyear#" to="#endyear#" index="i">
                -- prepend comma before each statement. Also, variable i must be passed in since it exists as a CF variable, not a SQL variable.
                ,SUM(CASE WHEN quarter = <cfqueryparam value="#i#" cfsqltype="cf_sql_integer" />  THEN 1 ELSE 0 END) AS year#i#
            </cfloop>
    FROM    testTable
</cfquery>

注意:这里假设 quarter 的数据类型是整数。根据需要更改 cfsqltype 属性。

您还可以使用 PIVOT 函数来构建您的列。