2017-04-20 239 views
0

我有稱爲劑的SQL表,其看起來如下:SQL嵌套總和查詢

tblAgent

有一個在數據的要求,某些試劑獲得較高的薪水比那些試劑的總和他們監督。 我已經寫了下面的SQL查詢來檢索代理的名字,他們的個人薪水以及他們在下面監督的工資的總和。 只需要顯示個人工資大於60000的代理商。

SELECT Agent.Agentname AS ["Supervisor Name"], Agent.Salary, 
    (SELECT SUM(Agent.salary) FROM Agent 
    WHERE Agent.Supervisor IS NOT NULL 
    GROUP BY Agent.Supervisor;) 
AS ['Sum of Subordinate Salaries'] 
FROM Agent 
WHERE (((Agent.[Supervisor]) Is Not Null) AND ((Agent.[salary])>=60000)) 
GROUP BY Agent.AgentName 

我得到不過它說「您的查詢不包括指定表達式‘工資’作爲聚合函數的一部分」的錯誤。

我該如何糾正查詢並從中獲得理想的結果?

+0

在查詢中多次使用同一個表時,請使用限定表的別名(遍佈全部)來使其更清晰。 – jarlh

+0

@jarlh我已經這樣做了,但仍然發生同樣的錯誤。 –

+0

薪水既沒有彙總,也沒有在'group by'...這是問題 – JohnHC

回答

1
create table #agent (agentno varchar(5),agentname varchar(30),functn varchar(10),supervisor varchar(30),salary int) 

Insert into #agent values('A1','Jacobson','Manager','O1',120000), ('A2','Patel','Sales','A1',25000),('A3','Clark','Sales','A1',30000), 
('A4','Mabaso','Admin','A1',35000),('B1','Letele','Manager','O1',100000), ('B2','Smit','Sales','B1',35000), ('B3','Ho','Sales','B1',30000), 
('B4','Kruger','Admin','B1',40000),('C1','Mohd','Manager','O1',80000),('C2','Visser','MandR','C1',58000), 
('C3','Davie','Admin','C1',42000),('C4','Nakosi','MandR','C1',60000),('C5','Lai','Admin','C4',38000) 

select sup.agentname as supervisor_name ,SUM(agn.salary) as subordinate_salary_sum,sup.salary as supervisor_salary 
from #agent agn 
inner join #agent sup 
on agn.supervisor=sup.agentno 
where agn.salary>=60000 
group by sup.agentname,sup.salary 

當使用GROUP BY,SELECT語句中的列應該是目前同組的陳述或應該是在聚合function.In查詢agent.salary在小組由預期。