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