首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQLServer [Macromedia][SQLServer JDBC驱动程序][SQLServer]无效列名

SQLServer [Macromedia][SQLServer JDBC驱动程序][SQLServer]无效列名
EN

Stack Overflow用户
提问于 2017-05-08 22:30:45
回答 1查看 707关注 0票数 1

我们使用基于ColdFusion的住房软件,并在报表中使用SQL创建数据库函数。我正在编写一个自定义报告,试图从另一列中减去一列:更具体地说,从OCCUPANCY中减去OCCUPANCYOCCUPANCY列基于以下代码:

代码语言:javascript
运行
复制
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列名“占用”。

我不确定我是否解释得对。我很感谢你能提供的任何帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-05-09 01:35:34

您不能在同一级别上创建别名并在其他计算中使用它,因为别名尚未定义。要么在计算中重复整个CASE ... END语句(不太理想),要么使用另一个选项,例如CTE,派生表,应用运算符,等等

将现有的选择包装在CTE中可能是最简单的选项之一:

代码语言:javascript
运行
复制
;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。如果这是不可取的,请考虑设置默认设置。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43858244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档