Usuário com melhor resposta
SQL Server - Group By com COUNT na SubSelect

Pergunta
-
Olá pessoal...
Estou com uma dificuldade em relacionar o Count da subselect com o Group By. O Agrupamento está correto, mas o Count da SubSelect esta trazendo o registro total e eu preciso trazer o total por cada agrupamento(cada linha) e não o total geral. Não sei se com subselect é a melhor maneira de fazer isso, mas o que preciso é trazer total de exames(que está correto no agrupamento) e o total de exames onde o campo alterado seja = 1. Obrigado a todos.
Select et.Nome as TipoExame, e.Nome as Exame, COUNT(e.IDExame) as TotExame,
(Select count(e.Nome) Alterado
From Atendimento at INNER JOIN AtendimentoExame ate ON at.IDAtendimento = ate.IDAtendimento
INNER JOIN ClienteFuncao func ON at.IDFuncao = func.ID
INNER JOIN ExameTipo et ON ate.IDTipoExame = et.IDTipoExame
INNER JOIN Exame e ON ate.IDExame = e.IDExame
Where func.ID = 14
AND ate.Alterado = 1) as Anormal
From Atendimento at INNER JOIN AtendimentoExame ate ON at.IDAtendimento = ate.IDAtendimento
INNER JOIN ClienteFuncao func ON at.IDFuncao = func.ID
INNER JOIN ExameTipo et ON ate.IDTipoExame = et.IDTipoExame
INNER JOIN Exame e ON ate.IDExame = e.IDExame
Where func.ID = 14
Group BY et.Nome, e.Nome
order by et.Nome, e.Nome
Alexander
Respostas
-
Boa noite,
Experimente desta forma:
Select et.Nome as TipoExame, e.Nome as Exame, COUNT(e.IDExame) as TotExame, SUM(case when ate.Alterado = 1 then 1 else 0 end) as Anormal From Atendimento at INNER JOIN AtendimentoExame ate ON at.IDAtendimento = ate.IDAtendimento INNER JOIN ClienteFuncao func ON at.IDFuncao = func.ID INNER JOIN ExameTipo et ON ate.IDTipoExame = et.IDTipoExame INNER JOIN Exame e ON ate.IDExame = e.IDExame Where func.ID = 14 Group BY et.Nome, e.Nome order by et.Nome, e.Nome
Espero que seja útil.
Assinatura: http://www.imobiliariasemsuzano.com.br
- Marcado como Resposta Alexander Leão terça-feira, 19 de junho de 2012 11:35
Todas as Respostas
-
Boa noite,
Experimente desta forma:
Select et.Nome as TipoExame, e.Nome as Exame, COUNT(e.IDExame) as TotExame, SUM(case when ate.Alterado = 1 then 1 else 0 end) as Anormal From Atendimento at INNER JOIN AtendimentoExame ate ON at.IDAtendimento = ate.IDAtendimento INNER JOIN ClienteFuncao func ON at.IDFuncao = func.ID INNER JOIN ExameTipo et ON ate.IDTipoExame = et.IDTipoExame INNER JOIN Exame e ON ate.IDExame = e.IDExame Where func.ID = 14 Group BY et.Nome, e.Nome order by et.Nome, e.Nome
Espero que seja útil.
Assinatura: http://www.imobiliariasemsuzano.com.br
- Marcado como Resposta Alexander Leão terça-feira, 19 de junho de 2012 11:35
-
Bom Dia Gapimex...
Era isso mesmo, resolveu o problema, muito obrigado.
Alexander
- Editado Alexander Leão terça-feira, 19 de junho de 2012 11:36 ortografia