我对SQL很陌生,并且很难找到运行以下查询的好方法。
我有一张看起来像这样的表:
NAME JOB GRADE MANAGER NAME
X 7 O
Y 6 X
Z 5 X
A 4 Z
B 3 Z
C 2 Z
在此表中,它显示Y和Z报告到X,A,B和C报告到Z.
我想创建一个计算列,显示每个人最高级别直接报告的等级,如果他们不管理任何人,则创建“不适用”。所以这看起来像这样:
NAME JOB GRADE MANAGER NAME GRADE OF MOST SENIOR REPORT
X 7 O 6
Y 6 X N/A
Z 5 X 4
A 4 Z N/A
B 3 Z N/A
C 2 Z N/A
我该怎么做?
答案 0 :(得分:1)
SELECT g.*,isnull(convert(nvarchar, (SELECT max(g2.GRADE)
FROM dbo.Grade g2 WHERE
g2.manager =g.NAME AND g2.NAME!=g.NAME )),'N/A') as most_graded
FROM dbo.Grade g
max会找出最高等级的
<强>输入强>
X 7 O
y 6 X
Z 5 X
A 6 Z
C 2 Z
<强>输出强>
X 7 O 6
y 6 X N/A
Z 5 X 6
A 6 Z N/A
C 2 Z N/A
答案 1 :(得分:0)
这样的事情:
select name, job_grade, manager_name,
(select max(job_grade) from grades g2
where g2.manager_name = g1.name) as grade_of_most_recent_senior
from grades g1
order by name;
以上是ANSI SQL,应该适用于任何DBMS。
SQLFiddle示例:http://sqlfiddle.com/#!15/e0806/1