我的查询是这样的。
select id,name,salary,(salary-2000) AS [Deductedsalary]
from EmployeeDetails
我想在where子句中使用[Deductedsalary]列,类似于下面的查询。
select
id, name, salary, (salary-2000) AS [Deductedsalary]
from
EmployeeDetails
where
[Deductedsalary] > 5000
注意:我不想将过滤查询与'salary'列
一起使用答案 0 :(得分:2)
您无法直接执行此操作 - 您必须在基础Salary
列上进行过滤,或使用类似CTE的内容:
WITH CTE AS
(
SELECT
id, name, salary,
DeductedSalary = salary - 2000
FROM
dbo.EmployeeDetails
)
SELECT
id, name, salary, DeductedSalary
FROM
CTE
WHERE
[Deductedsalary] > 5000
答案 1 :(得分:2)
您可以使用子查询来定义别名:
select *
from (
select salary-2000 as deducted_salary
, *
from
EmployeeDetails
) SubQueryAlias
where Deductedsalary > 5000
答案 2 :(得分:2)
另一种方法是
SELECT id,
name,
salary,
DeductedSalary
FROM EmployeeDetails
CROSS APPLY (SELECT salary-2000) DS(DeductedSalary)
WHERE DeductedSalary > 5000
虽然我使用
SELECT id,
name,
salary,
( salary - 2000 ) AS [Deductedsalary]
FROM EmployeeDetails
WHERE [salary] > 7000
因为这是可以攻击的(可以使用索引并且会有更好的基数估计值)
答案 3 :(得分:1)
你可以尝试
Select *
FROM
(
select
id, name, salary, (salary-2000) AS [Deductedsalary]
from
EmployeeDetails
) data
where
[Deductedsalary] > 5000