SQL报告错误 - [Macromedia] [SQLServer JDBC驱动程序] [SQLServer]列名无效

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".

我不确定我是否正在解释这一点.我很感激您提供的任何帮助.

Lei*_*igh 5

您无法在同一级别的另一个计算中创建别名并使用它,因为别名尚未定义.要么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的匹配项.如果不希望这样,请考虑设置默认值.