我们使用基于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
)
当我尝试新功能OCCUPANCY - COUNT_OF_INSPECTION_TYPE
时,出现错误:
无法调用CFC - 执行数据库查询时出错。 [Macromedia] [SQLServer JDBC驱动程序] [SQLServer]列名无效 'OCCUPANCY'。
我不确定我是否正在解释这一点。我很感激您提供的任何帮助。
答案 0 :(得分:5)
您无法创建alias并在同一级别的其他计算中使用它,因为别名尚未定义。要么在计算中重复整个CASE ... END
语句(不太理想),要么使用其他选项,例如CTE, derived table, APPLY operator, etcetera。
在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
旁注,由于CASE语句没有定义ELSE条件,如果没有HallName匹配,计算结果将为NULL
。如果不希望这样,请考虑设置默认值。