Sql 我怎样才能让我的薪资级别转换案例成为有效的列名
系统在案例方法“salary\u score=case salary\u level…”中显示无效的列名“salary\u level”。您不能指向查询中生成的列。您可以重复使用相同的CASE语句生成1到6,如下所示-Sql 我怎样才能让我的薪资级别转换案例成为有效的列名,sql,sql-server,database,sorting,error-handling,Sql,Sql Server,Database,Sorting,Error Handling,系统在案例方法“salary\u score=case salary\u level…”中显示无效的列名“salary\u level”。您不能指向查询中生成的列。您可以重复使用相同的CASE语句生成1到6,如下所示- select concat(first_name,' ',last_name) as name,J.job_title, salary, J.min_salary, J.max_salary,(case when salary >= (J.min_salary + (J.
select concat(first_name,' ',last_name) as name,J.job_title, salary, J.min_salary, J.max_salary,(case
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.9) then 'SS'
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.7) then 'S'
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.5) then 'A'
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.3) then 'B'
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.1) then 'C'
else 'D' end) as salary_level, salary_score = case salary_level
when 'SS' then 1
when 'S' then 2
when 'A' then 3
when 'B' then 4
when 'C' then 5
when 'D' then 6 end from employees E inner join jobs J on E.job_id = J.job_id order by salary_score
因为别名在同一
select
语句中不可用。您需要一个子选择
或应用
操作符来使用别名
在这种情况下,我更喜欢使用Apply
操作符,这样可以避免sub-select
并且看起来很干净
select concat(first_name,' ',last_name) as name,J.job_title, salary, J.min_salary, J.max_salary,
(case
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.9) then 'SS'
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.7) then 'S'
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.5) then 'A'
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.3) then 'B'
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.1) then 'C'
else 'D'
end) as salary_level,
salary_score = (case
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.9) then 1
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.7) then 2
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.5) then 3
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.3) then 4
when salary >= (J.min_salary + (J.max_salary - J.min_salary)*0.1) then 5
else 6
end)
from employees E inner join jobs J on E.job_id = J.job_id order by salary_score
请不要张贴图片。需要文本。不能在同一select子句中引用计算列。重复计算该列的代码或将其作为子查询。
SELECT Concat(first_name, ' ', last_name) AS NAME,
j.job_title,
salary,
j.min_salary,
j.max_salary,
cs.salary_level,
salary_score = CASE salary_level
WHEN 'SS' THEN 1
WHEN 'S' THEN 2
WHEN 'A' THEN 3
WHEN 'B' THEN 4
WHEN 'C' THEN 5
WHEN 'D' THEN 6
END
FROM employees E
INNER JOIN jobs J
ON e.job_id = j.job_id
CROSS apply (SELECT CASE WHEN salary >= ( j.min_salary + ( j.max_salary - j.min_salary ) * 0.9 ) THEN 'SS'
WHEN salary >= ( j.min_salary + ( j.max_salary - j.min_salary ) * 0.7 ) THEN 'S'
WHEN salary >= ( j.min_salary + ( j.max_salary - j.min_salary ) * 0.5 ) THEN 'A'
WHEN salary >= ( j.min_salary + ( j.max_salary - j.min_salary ) * 0.3 ) THEN 'B'
WHEN salary >= ( j.min_salary + ( j.max_salary - j.min_salary ) * 0.1 ) THEN 'C'
ELSE 'D'
END) cs (salary_level)
ORDER BY salary_score