2015-12-21 66 views
1

我會用一個實際的例子來解釋我的問題,以便更直觀地看到問題。我建立這個查詢:最大計數SQL Server

Select 
    E.Tipo_Esp, F.Nome, F.Apelido, 
    count (Ac.id_acto) as total_consultas 
from 
    Especialidade as E 
right join 
    Funcionario as F on F.id_Esp = E.id_Esp 
inner join 
    Acto as Ac on Ac.id_func = F.id_func 
inner join 
    TipoActo as TA on TA.id_Tipo_acto = Ac.id_Tipo_acto 
where 
    TA.Descricao_Acto = 'Consulta' 
group by 
    E.Tipo_Esp, F.Nome, F.Apelido 
order by 
    count(Ac.id_acto) DESC 

到達以下結果:

Tipo_Esp Nome Apelido total_consultas 
Ortopedia Maria Antonia 3 
Ortopedia Luis Cruz  1 
Cirurgia André Martins 2 
Cirurgia Diogo Martins 1 

但是我需要到是這樣的:

Tipo_Esp Nome Apelido total_consultas 
Ortopedia Maria Antonia 3 
Cirurgia André Martins 2 

這意味着我只需要較高的計數爲每個「Tipo_Esp」。我試圖將上面的查詢作爲子查詢應用最大計數函數,但它的確如預期的那樣順利。有人可以幫我解決這個問題嗎?在此先感謝

回答

0

你可以這樣做:

with orig as (
    Select E.Tipo_Esp, F.Nome, F.Apelido, count (Ac.id_acto) as total_consultas from 
    Especialidade as E 
    right join Funcionario as F on F.id_Esp = E.id_Esp 
    inner join Acto as Ac on Ac.id_func = F.id_func 
    inner join TipoActo as TA on TA.id_Tipo_acto = Ac.id_Tipo_acto 
    WHERE TA.Descricao_Acto = 'Consulta' 
    GROUP BY E.Tipo_Esp, F.Nome, F.Apelido 
    ORDER BY count(Ac.id_acto) DESC 
) 
select o.* 
from orig o 
inner join (
    select tipo_esp, max(total_consultas) as maxtotal 
    from orig 
    group by tipo_esp 
) t on o.tipo_esp = t.tipo_esp and o.total_consultas = t.maxtotal