2016-01-08 114 views
0

我對SQL相當陌生,正努力尋找一種運行以下查詢的好方法。如何在同一個表中的SQL中運行vlookup函數?

我有一個表,看起來是這樣的:

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 

我該怎麼做?

+4

請不要張貼截圖。發佈格式化文本。您可以將編輯回滾到以前(更好)的版本。 –

+0

計算列?你在使用SQL Server嗎? (使用標記dbms,你會得到更好的答案,更快。) – jarlh

+0

這是一個需要運行的查詢,還是需要維護的實際存儲(因爲數據量是數億行)?你是否研究過VIEWS,INDEXED VIEWS和EFT OUTER JOIN操作(特別是一個自我離開的外部連接回到同一個表? –

回答

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

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 
相關問題