在SQL查询中使用计算字段

时间:2011-03-24 16:50:31

标签: sql visual-studio calculated-field

我有一个SQL查询,其中我有一个计算字段来计算贡献保证金。我得到它显示,数学运行正常。我遇到的问题是我只想显示贡献保证金低于0.25的记录。我知道你不能在where子句中使用列别名。我想知道这样做的最佳方法是什么。我也在使用Visual Studio。

4 个答案:

答案 0 :(得分:4)

SELECT  *
FROM    (
        SELECT  m.*,
                compute_margin(field1, field2) AS margin
        FROM    mytable m
        ) q
WHERE   margin < 0.25

答案 1 :(得分:1)

您不能使用列别名(除非您将原始查询用作子查询),但您可以使用您用来定义计算值的表达式。

例如,如果您的查询现在是:

select
    contribution_amount,
    total_amount,
    contribution_amount / total_amount as contribution_margin

from records

你可以这样做:

select
    contribution_amount,
    total_amount,
    contribution_amount / total_amount as contribution_margin

from records

where contribution_amount / total_amount < 0.25

或者这个:

select * from
(
    select
        contribution_amount,
        total_amount,
        contribution_amount / total_amount as contribution_margin

    from records
)
where contribution_margin < 0.25

(就个人而言,我发现第一个版本更可取,但两者的表现可能相同)

答案 2 :(得分:0)

你可以

  • 重复where子句
  • 中的计算
  • 将查询包装在表表达式(CTE或派生表)中,并使用where子句中的别名
  • cross apply
  • 中指定别名

举一个最后一种方法的例子

select doubled_schema_id,*
from sys.objects
cross apply (select schema_id*2 as doubled_schema_id) c
where doubled_schema_id= 2

答案 3 :(得分:0)

两种方式,要么是Quassnoi发布的解决方案(你也可以使用类似的CTE)

WHERE compute_margin(field1, field2) < 0.25