none
SQL Server - Group By com COUNT na SubSelect RRS feed

  • 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

    segunda-feira, 18 de junho de 2012 19:03

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
    segunda-feira, 18 de junho de 2012 21:32

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
    segunda-feira, 18 de junho de 2012 21:32
  • 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
    terça-feira, 19 de junho de 2012 11:35