sql - 根据标量函数结果过滤 SQL 查询

标签 sql sql-server

在 SQL Server 中,我似乎无法在 WHERE 中使用别名列名。条款

这不起作用

SELECT *, [dbo].[myFunc] (X.Prop1) AS Width 
FROM X 
WHERE Width > 0

我要做
SELECT *, [dbo].[myFunc] (X.Prop1) AS Width 
FROM X 
WHERE [dbo].[myFunc] (X.Prop1) > 0

我担心的是 SQL 正在执行 [dbo].[myFunc] (X.Prop1)两次。

我的问题是:
  • 它是执行两次还是 SQL Server 足够智能?
  • 有没有办法在 WHERE 中使用别名列?条款?
  • 最佳答案

    我不确定它是否计算了两次,但是您可以使用 CROSS APPLY 来避免这种情况。 :

    SELECT *, Width  
    FROM X 
    CROSS APPLY (Select [dbo].[myFunc] (X.Prop1)) N(Width)
    WHERE Width > 0
    

    看这个 fiddle选择大于 10 的值的平方。

    关于sql - 根据标量函数结果过滤 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30744748/

    相关文章:

    java - 将 ID 分配给 JPA native 查询结果的最简单方法是什么?

    sql - 是否可以在 T-SQL 中按彼此的差异对行进行分组

    Java - 将 .csv 导入数据库 - 排除第一行

    sql - 如何列出 Oracle sql 中具有特定列的模式中的所有表?

    sql - 使用 SQL 计算 AVG,限制为最后 10 行并按 SQLite 中的字段分组

    c# - 如何使用SSIS脚本任务删除Excel目标中的第二行? SQL Server 2012

    sql-server - 在 SQL 查询中减去两列

    sql - 在 SQL 中审计 DISABLE/ENABLE 触发器

    SQL Server 2008,加入还是不加入?

    sql - 基于其他列的最常见的 2 个值