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
函数来构建您的列。
我想知道是否可以在 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
函数来构建您的列。