【问题标题】:SELECT COL1+COL2 as CalcColumn,* FROM TABLE WITH (NOLOCK) WHERE 100<COL1+COL2SELECT COL1+COL2 as CalcColumn,* FROM WITH (NOLOCK) WHERE 100<COL1+COL2
【发布时间】:2011-10-13 07:19:08
【问题描述】:

在使用基于计算值的条件的 SELECT 语句中,是否可以在不计算计算值两次的情况下包含该计算值 - 一次在选择中,再次在条件中?

我使用的是 SQL Server 2000。

【问题讨论】:

    标签: sql sql-server sql-server-2000


    【解决方案1】:

    您可以将所有内容放入子查询中并从中进行选择

    SQL 语句

    SELECT *
    FROM   (
             SELECT COL1 + COL2 as CalcColumn
             FROM   Table
           ) q
    WHERE  100 < CalcColumn 
    

    但就性能而言,我预计这会比您的原始查询慢。

    【讨论】:

    • 不会再慢了。计划将是相同的。当然,条件是完全不可分割的,OP 需要一个索引计算列来避免扫描。
    【解决方案2】:

    如果您在编写查询时使用查询,则不会有任何显着的性能损失。我相信 SQL 会为你处理它。我的问题是,你为什么要使用上个世纪的软件?

    我刚试过

    SELECT Debit, Credit, Debit+Credit AS CalcColumn FROM JDT1 WHERE CalcColumn > 100
    

    根据几个人的建议,在 SQL 2005 上,错误是: 消息 207,第 16 层,状态 1,第 1 行 列名“CalcColumn”无效。

    【讨论】:

    【解决方案3】:
    SELECT COL1+COL2 as CalcColumn,* 
    FROM TABLE WITH (NOLOCK) 
    WHERE 100 < CalcColumn
    

    希望有帮助。

    【讨论】:

      【解决方案4】:

      我通常创建一个视图以具有可重复使用的计算列。

      CREATE VIEW TableView
      AS
      SELECT COL1+COL2 as CalcColumn,*  FROM TABLE WITH (NOLOCK)  
      
      GO
      
      SELECT * FROM TableView WHERE 100 < CalcColumn
      

      【讨论】:

        猜你喜欢
        • 2013-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-12
        • 1970-01-01
        • 2016-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多