none
Select mesmo campo com dados diferentes RRS feed

  • Pergunta

  • <object height="0" id="28e9e95b-eb3b-afb0-da88-48bdeb97a2b5" type="application/gas-events-abn" width="0"></object>

    Bom dia meus amigos

    Preciso fazer um SELECT

    esse SELECT tem que me retornar o [Status do Aluno]:

    [Status do Aluno] AS Falta

    [Status do Aluno] AS Presença

    Sendo que o [Status do Aluno] Pode ter valor 1 = Presença e valor 2 = Falta

     

    Até o momento meu SQL está assim (incorreto):

     
    SELECT
       Matrículas.[Código da Matrícula],
       Alunos.[Código do Aluno],
       Alunos.[Nome do Aluno],
       SUM([Presenças das Matrículas].[Status do Aluno] = 2) As Presença,
       SUM([Presenças das Matrículas].[Status do Aluno] = 1) As Falta,
       SUM([Presenças das Matrículas].[Reposição]) As Reposição
    FROM
      (Matrículas INNER JOIN Alunos ON Matrículas.[Código do Aluno] = Alunos.[Código do Aluno]) INNER JOIN [Presenças das Matrículas] ON Matrículas.[Código da Matrícula] = [Presenças das Matrículas].[Código da Matrícula]
    WHERE
       Matrículas.[Matrícula Ativa] = -1
    GROUP BY
       Matrículas.[Código da Matrícula],
       Alunos.[Código do Aluno],
       Alunos.[Nome do Aluno]
     
    Se alguém precisar eu mando o exemplo do Banco, só me passar o e-mail
    MUITO OBRIGADO

    Dalto Blanco - Ciência da computação

    quarta-feira, 24 de julho de 2013 16:06

Respostas

  • Dalton,

    Como ficou a sua query completa?

    SELECT
       Matrículas.[Código da Matrícula],
       Alunos.[Código do Aluno],
       Alunos.[Nome do Aluno],
       COUNT(case when [Presenças das Matrículas].[Status do Aluno] = 1 then 1 end) As Presença,
       COUNT(case when [Presenças das Matrículas].[Status do Aluno] = 2 then 1 end) As Falta,
       SUM([Presenças das Matrículas].[Reposição]) As Reposição
    FROM
      (Matrículas INNER JOIN Alunos ON Matrículas.[Código do Aluno] = Alunos.[Código do Aluno]) INNER JOIN [Presenças das Matrículas] ON Matrículas.[Código da Matrícula] = [Presenças das Matrículas].[Código da Matrícula]
    WHERE
       Matrículas.[Matrícula Ativa] = -1
    GROUP BY
       Matrículas.[Código da Matrícula],
       Alunos.[Código do Aluno],
       Alunos.[Nome do Aluno]

    Sobre o Case confira a página abaixo:

    http://msdn.microsoft.com/en-us/library/ms181765.aspx

    Da forma como sugeri o Case deverá retornar 1 quando a condição for verdadeira ou null (nesse caso o Count não conta a linha) quando for falsa.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Dalto P. Blanco quarta-feira, 24 de julho de 2013 19:43
    quarta-feira, 24 de julho de 2013 19:17
  • Não conheço o Access, não sei se vai funcionar, mas experimente dessa forma:

       COUNT(iif([Presenças das Matrículas].[Status do Aluno] = 1, 1, null)) As Presença,
       COUNT(iif([Presenças das Matrículas].[Status do Aluno] = 2, 1, null)) As Falta,

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Dalto P. Blanco quarta-feira, 24 de julho de 2013 19:43
    quarta-feira, 24 de julho de 2013 19:39

Todas as Respostas

  • Boa tarde,

    Experimente dessa forma:

       COUNT(case when [Presenças das Matrículas].[Status do Aluno] = 1 then 1 end) As Presença,
       COUNT(case when [Presenças das Matrículas].[Status do Aluno] = 2 then 1 end) As Falta,

    Espero que ajude.

    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 24 de julho de 2013 17:32
  • Deleted
    quarta-feira, 24 de julho de 2013 18:37
  • Dalton,

    Como ficou a sua query completa?

    SELECT
       Matrículas.[Código da Matrícula],
       Alunos.[Código do Aluno],
       Alunos.[Nome do Aluno],
       COUNT(case when [Presenças das Matrículas].[Status do Aluno] = 1 then 1 end) As Presença,
       COUNT(case when [Presenças das Matrículas].[Status do Aluno] = 2 then 1 end) As Falta,
       SUM([Presenças das Matrículas].[Reposição]) As Reposição
    FROM
      (Matrículas INNER JOIN Alunos ON Matrículas.[Código do Aluno] = Alunos.[Código do Aluno]) INNER JOIN [Presenças das Matrículas] ON Matrículas.[Código da Matrícula] = [Presenças das Matrículas].[Código da Matrícula]
    WHERE
       Matrículas.[Matrícula Ativa] = -1
    GROUP BY
       Matrículas.[Código da Matrícula],
       Alunos.[Código do Aluno],
       Alunos.[Nome do Aluno]

    Sobre o Case confira a página abaixo:

    http://msdn.microsoft.com/en-us/library/ms181765.aspx

    Da forma como sugeri o Case deverá retornar 1 quando a condição for verdadeira ou null (nesse caso o Count não conta a linha) quando for falsa.

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Dalto P. Blanco quarta-feira, 24 de julho de 2013 19:43
    quarta-feira, 24 de julho de 2013 19:17
  • Não conheço o Access, não sei se vai funcionar, mas experimente dessa forma:

       COUNT(iif([Presenças das Matrículas].[Status do Aluno] = 1, 1, null)) As Presença,
       COUNT(iif([Presenças das Matrículas].[Status do Aluno] = 2, 1, null)) As Falta,

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Dalto P. Blanco quarta-feira, 24 de julho de 2013 19:43
    quarta-feira, 24 de julho de 2013 19:39