【问题标题】:TSQL View with Calculated Column from View Columns带有来自视图列的计算列的 TSQL 视图
【发布时间】:2014-03-11 02:15:06
【问题描述】:

我正在尝试做一些我认为在 SQL Server 中相当简单但遇到一些障碍的事情。基本上我在一个视图中创建了两列,然后想要使用这些列来创建一个计算列。我已经阅读了一些不同的问题,但其中大多数涉及案例或外部表格。这是我正在尝试的方法

CREATE VIEW [dbo].[VIEW_NAME]
AS
    SELECT  
        ,DATEDIFF (SECOND, (CAST(a.begintime as datetime)), (CAST (a.endtime as datetime))) AS [Email Total Response Time]
        ,1 AS [Email Total Handled]
        ,[Email Total Response Time] / COUNT([Email Total Handled]) AS [Avg Email Response Time]
    FROM .....

我的[Email Total Response Time][Email Total Handled] 创建成功,但是计算的列在执行时给出了这个错误

消息 207,级别 16,状态 1,过程 PPM_OLH_NEW_MAIL_SESSION_CUBE,第 22 行
列名“电子邮件总响应时间”无效。
消息 207,级别 16,状态 1,过程 PPM_OLH_NEW_MAIL_SESSION_CUBE,第 22 行
列名“已处理的电子邮件总数”无效。

【问题讨论】:

    标签: sql sql-server tsql calculated-columns


    【解决方案1】:

    您不能直接引用命名项目来在同一个选择中创建新项目。

    所以例如这会出错:

    SELECT  20 AS val1
          , 10 AS val2
          , val1 / val2
    
    /*
    Msg 207, Level 16, State 1, Line 4 Invalid column name 'val1'. 
    Msg 207, Level 16, State 1, Line 4 Invalid column name 'val2'.
    */
    

    这将起作用(注意您需要别名 a):

    SELECT  val1
          , val2
          , val1 / val2
    FROM    ( SELECT    20 AS val1
                      , 10 AS val2
            ) a
    

    或者您可以使用 With 子句来获得相同的结果:

    ;
    WITH    vals
              AS ( SELECT   20 AS val1
                          , 10 AS val2
                 )
        SELECT  val1
              , val2
              , val1 / val2
        FROM    vals
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多