我们使用基于ColdFusion的住房软件,并在报表中使用SQL创建数据库函数。我正在编写一个自定义报告,试图从另一列中减去一列:更具体地说,从OCCUPANCY
中减去OCCUPANCY
。OCCUPANCY
列基于以下代码:
CONVERT(INT
, CASE
WHEN tblHalls.HALLNAME = 'Hall1' THEN 198
WHEN tblHalls.HALLNAME = 'Hall2' THEN 430
WHEN tblHalls.HALLNAME = 'Hall3' THEN 333
END
)
当我尝试一个新函数OCCUPANCY - COUNT_OF_INSPECTION_TYPE
时,会得到一个错误:
无法调用CFC -执行数据库查询时出错。 MacromediaSQLServerInvalid列名“占用”。
我不确定我是否解释得对。我很感谢你能提供的任何帮助。
发布于 2017-05-09 01:35:34
您不能在同一级别上创建别名并在其他计算中使用它,因为别名尚未定义。要么在计算中重复整个CASE ... END
语句(不太理想),要么使用另一个选项,例如CTE,派生表,应用运算符,等等。
将现有的选择包装在CTE中可能是最简单的选项之一:
;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
附带注意,由于CASE语句没有定义其他条件,如果没有HallName的匹配,则计算结果将是NULL
。如果这是不可取的,请考虑设置默认设置。
https://stackoverflow.com/questions/43858244
复制相似问题