none
[Solucionado] Dúvida em GROUP BY RRS feed

  • Pergunta

  • Boas..

    Tenho a seguinte query num SP

        SELECT Utentes.SituacaoConjugal, COUNT(DISTINCT Utentes.NProcesso) AS Valor, COUNT(Utentes.NProcesso) AS Valor2
        FROM Utentes
            LEFT OUTER JOIN Servicos_Prestados
            ON Utentes.NProcesso = Servicos_Prestados.NProcesso
        WHERE (Servicos_Prestados.Data_Servico BETWEEN @DataInicial AND @DataFinal)
            AND (Servicos_Prestados.SP_ServicoGAF = ISNULL(@Servico, Servicos_Prestados.SP_Servico))
        GROUP BY dbo.Utentes.SituacaoConjugal

    Em que me mostra os valores referentes à situacao conjugal..
    Até aqui tudo bem..

    O meu problema é o seguinte, ele mostra-me o valor total, e eu queria que ele me mostrasse o valor distribuido pelo sexo do Utente, que é um campo pertencente à tabela Utentes..

    O que me mostra é o seguinte:
    Situacao Conjugal  N.º Utentes   N.º Atendimento
    Casado                     2                        3

    O que eu quero é
    Situacao Conjugal  N.º Utentes - M   N.º Atendimento - M  N.º Utentes - F   N.º Atendimento - F
    Casado                         1                        2                             1                                    1


    sexta-feira, 11 de janeiro de 2008 10:34

Respostas

  • olá Vitor,

     

    veja se isso te ajuda

     

    Code Block

     

    SELECT
    Utentes.SituacaoConjugal,
    COUNT(case Utentes.NProcesso when 'M' then 1 else 0 end) AS [Utente - M],
    COUNT(case Servicos_Prestados.NProcesso when 'M' then 1 else 0 end) AS [Atend - M],
    COUNT(case Utentes.NProcesso when 'F' then 1 else 0 end) AS [Utente - F],
    COUNT(case Servicos_Prestados.NProcesso when 'F' then 1 else 0 end) AS [Atend - F]

        FROM Utentes
            LEFT OUTER JOIN Servicos_Prestados
            ON Utentes.NProcesso = Servicos_Prestados.NProcesso
        WHERE (Servicos_Prestados.Data_Servico BETWEEN @DataInicial AND @DataFinal)
            AND (Servicos_Prestados.SP_ServicoGAF = ISNULL(@Servico, Servicos_Prestados.SP_Servico))
        GROUP BY dbo.Utentes.SituacaoConjugal

     

     

    Espero ter ajudado

    []s
    sexta-feira, 11 de janeiro de 2008 11:19
  • tente assim

     

    SELECT
    Utentes.SituacaoConjugal,
    count(distinct(case Utentes.NProcesso when 'M' then Utentes.NProcesso else 0 end )) [Utente - M],
    COUNT(case Servicos_Prestados.NProcesso when 'M' then 1 else 0 end) AS [Atend - M],

     

    acho que resolve..

    Se não resolver coloca a estrutura da tabela

    sexta-feira, 11 de janeiro de 2008 13:47

Todas as Respostas

  • olá Vitor,

     

    veja se isso te ajuda

     

    Code Block

     

    SELECT
    Utentes.SituacaoConjugal,
    COUNT(case Utentes.NProcesso when 'M' then 1 else 0 end) AS [Utente - M],
    COUNT(case Servicos_Prestados.NProcesso when 'M' then 1 else 0 end) AS [Atend - M],
    COUNT(case Utentes.NProcesso when 'F' then 1 else 0 end) AS [Utente - F],
    COUNT(case Servicos_Prestados.NProcesso when 'F' then 1 else 0 end) AS [Atend - F]

        FROM Utentes
            LEFT OUTER JOIN Servicos_Prestados
            ON Utentes.NProcesso = Servicos_Prestados.NProcesso
        WHERE (Servicos_Prestados.Data_Servico BETWEEN @DataInicial AND @DataFinal)
            AND (Servicos_Prestados.SP_ServicoGAF = ISNULL(@Servico, Servicos_Prestados.SP_Servico))
        GROUP BY dbo.Utentes.SituacaoConjugal

     

     

    Espero ter ajudado

    []s
    sexta-feira, 11 de janeiro de 2008 11:19
  • Ricardo..
    Obrigado..

    Consegui..Tive substituir o COUNT pelo SUM para ele me somar o valor que era apropriado..
    Mais uma vez obrigado..

    sexta-feira, 11 de janeiro de 2008 11:30
  • é verdade.. esqueci de trocar..

    ainda bem que funcionou..

     

    valeu pelo retorno

    []s

     

    sexta-feira, 11 de janeiro de 2008 13:30
  • afinal não está solucionado..
    Quando uso o distinct não me conta os dados bem..só me mostra 4 quando devia mostrar 22

    Quando é para contar o número em relação ao numero de atedimentos, mostra correctamente..Mas quando quero que me conte pelo numero de utente, dá um número muito baixo não sei por que..
    e com o distinct que funcionava com o group by não funciona
    sexta-feira, 11 de janeiro de 2008 13:36
  • tente assim

     

    SELECT
    Utentes.SituacaoConjugal,
    count(distinct(case Utentes.NProcesso when 'M' then Utentes.NProcesso else 0 end )) [Utente - M],
    COUNT(case Servicos_Prestados.NProcesso when 'M' then 1 else 0 end) AS [Atend - M],

     

    acho que resolve..

    Se não resolver coloca a estrutura da tabela

    sexta-feira, 11 de janeiro de 2008 13:47
  • Mesmo assim não dá o valor correcto...
    tentei substituir o count pelo sum mas não deu..

    Utentes           
    NProcesso (Chave)
    Data
    Nome
    Sexo (só F ou M)

    Servicos_Prestados
    CodServico (Chave)
    NProcesso (Chave externa)
    DataServico
    Servico


    sexta-feira, 11 de janeiro de 2008 13:55
  • Consegui...

    Mudei o seguinte..
    COUNT(DISTINCT (CASE Utentes.sexo WHEN 'M' THEN utentes.nprocesso END)) AS [Utente - M]
    sexta-feira, 11 de janeiro de 2008 14:25
  • Eu acho que quando tiver um Utente sem ter registro na tabela Servicos_Prestados, pode haver erro

     

    tente assim

     

     

    Code Block

    SELECT
    Utentes.SituacaoConjugal,
    count(distinct(case Sexo when 'M' then Utentes.NProcesso else null end )) [Utente - M],
    sum(case when Sexo='M'and Servicos_Prestados.NProcesso is not null then 1 else null end) AS [Atend - M],
    count(distinct(case Sexo when 'F' then Utentes.NProcesso else null end)) AS [Utente - F],
    sum(case when Sexo='F'and Servicos_Prestados.NProcesso is not null then 1 else null end) AS [Atend - F]

        FROM Utentes
            inner JOIN Servicos_Prestados
            ON Utentes.NProcesso = Servicos_Prestados.NProcesso
        WHERE (Servicos_Prestados.Data_Servico BETWEEN @DataInicial AND @DataFinal)
            AND (Servicos_Prestados.SP_ServicoGAF = ISNULL(@Servico, Servicos_Prestados.SP_Servico))
        GROUP BY dbo.Utentes.SituacaoConjugal

     

     

    Veja se te ajuda

    []s

    sexta-feira, 11 de janeiro de 2008 15:25