DAN*_*YJ1 1 sql-server coldfusion
我们使用基于ColdFusion的外壳软件,并使用SQL在我们的报告中创建数据库功能.我正在编写一个自定义报告,试图从另一列中减去一列:更具体地说,COUNT_OF_INSPECTION_TYPE从中减去OCCUPANCY.该OCCUPANCY列基于以下代码:
CONVERT(INT
, CASE
WHEN tblHalls.HALLNAME = 'Hall1' THEN 198
WHEN tblHalls.HALLNAME = 'Hall2' THEN 430
WHEN tblHalls.HALLNAME = 'Hall3' THEN 333
END
)
Run Code Online (Sandbox Code Playgroud)
当我尝试新功能时OCCUPANCY - COUNT_OF_INSPECTION_TYPE,我收到一个错误:
无法调用CFC - 执行数据库查询时出错. [Macromedia] [SQLServer JDBC驱动程序] [SQLServer]无效的列名称"OCCUPANCY".
我不确定我是否正在解释这一点.我很感激您提供的任何帮助.
您无法在同一级别的另一个计算中创建别名并使用它,因为别名尚未定义.要么CASE ... END在计算中重复整个语句(不太理想),要么使用另一个选项,例如CTE,派生表,APPLY运算符等.
在CTE中包装现有的SELECT 可能是最简单的选项之一:
;WITH cte
AS
(
-- Your current SELECT statement goes here
SELECT
CONVERT(INT
, CASE
WHEN tblHalls.HALLNAME = 'Hall1' THEN 198
WHEN tblHalls.HALLNAME = 'Hall2' THEN 430
WHEN tblHalls.HALLNAME = 'Hall3' THEN 333
END
)
AS OCCUPANCY
, tblHalls.COUNT_OF_INSPECTION_TYPE
, ... (Other Columns)
FROM tblHalls
)
-- Now use the alias in a calculation
SELECT cte.*
, cte.OCCUPANCY - cte.COUNT_OF_INSPECTION_TYPE AS SomeAliasForThisCol
FROM cte
Run Code Online (Sandbox Code Playgroud)
注意,由于CASE语句没有定义ELSE条件,因此计算结果将是NULLHallName的匹配项.如果不希望这样,请考虑设置默认值.