none
Somando campos de 2 linhas e 2 colunas agrupados RRS feed

  • Pergunta

  • Bom dia pessoal,

    estou fazendo uma consulta que retorna para mim nomes, matriculas, turma, e notas de alunos, estou com problema na hora de somar notas, é que o periodo letivo é dividido em 3 ciclos, e não estou conseguindo soma-los, estou fazendo relação entre tabelas e esta me trazendo valores duplicados, estou fazendo um SUM simples e esta somente somente as mesmas linhas, não esta pegando uma e somando com a outra. Como faço para somar P1+P2+P3 da CODETP[1,2], fazendo q não me traga valores duplicados e nem nulos? Pq alguns p3 tem valores e outros não, com isso ou me tras tudo null ou duplicado.


    CharlesTI.


    • Editado CHARLES.PTU quarta-feira, 2 de março de 2016 13:31
    quarta-feira, 2 de março de 2016 13:28

Respostas

  • Experimente fazer um teste dessa forma:

    select 
        EALUNOS.MATRICULA,
        EALUNOS.NOME,
        UMATALUN.CODTUR,
        UMATALUN.PERLETIVO,
        UMATALUN.CODMAT,
        UMATERIAS.MATERIA, 
        sum(coalesce(P1, 0) + coalesce(P2, 0) + coalesce(P3, 0)) as 'NOTA'
    from UMATALUN
    inner join EALUNOTPR 
        on 
            umatalun.mataluno = ealunotpr.mataluno and 
            umatalun.perletivo = ealunotpr.perletivo and 
            umatalun.codcur = ealunotpr.codcur and 
            umatalun.codtur = ealunotpr.codtur and 
            umatalun.codmat = ealunotpr.codmat
    inner join EALUNOS 
        on 
            ealunos.MATRICULA = UMATALUN.MATALUNO and 
            EALUNOS.CODCOLIGADA = UMATALUN.CODCOLIGADA
    inner join UMATERIAS 
        on 
            UMATERIAS.CODMAT = UMATALUN.CODMAT
    inner join UMATRICPL 
        on 
            UMATALUN.MATALUNO = UMATRICPL.MATALUNO and 
            UMATALUN.PERLETIVO = UMATRICPL.perletivo and 
            UMATALUN.codcur = UMATRICPL.codcur
    where 
        --UMATALUN.PERLETIVO like 'T%' AND
        UMATALUN.STATUS='ma' and
        EALUNOTPR.CODCUR='53' and
        EALUNOS.MATRICULA = '14-1-09673' and 
        UMATRICPL.PERLETIVO = 't14-m1'
    GROUP BY 
        EALUNOS.MATRICULA,
        EALUNOS.NOME,
        UMATALUN.CODTUR,
        UMATALUN.PERLETIVO,
        UMATALUN.CODMAT,
        UMATERIAS.MATERIA
    order by 
        3, 6 

    Espero que ajude


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

    • Marcado como Resposta CHARLES.PTU quarta-feira, 2 de março de 2016 16:43
    quarta-feira, 2 de março de 2016 15:21

Todas as Respostas

  • Bom dia,

    Acho que para somar as linhas com o CODETP igual 1 e 2 você poderia retirar essa coluna da consulta, ou utilizar uma função de agregação (ex: min, max, etc) com essa coluna e retira-la do Group By.

    E sobre o null você poderia utilizar a função IsNull ou Coalesce para trocar o null por 0. Ex:

    sum(coalesce(P3, 0)) as P3

    Sobre os valores duplicados, se entendi corretamente acho que você tem que verificar se o relacionamento entre as tabelas está correto.

    Espero que ajude


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

    quarta-feira, 2 de março de 2016 14:20
  • Bom dia Gapimex,

    é uma coisa até simples para vcs, quero somar p1,p2 e p3 das linhas CODETP 1 E 2.


    CharlesTI.

    quarta-feira, 2 de março de 2016 14:34
  • O NOME DOS CAMPOS SÃO OS MESMO, PORÉM É CICLO 1 E 2. A RESPEITO DO RELACIONAMENTO ESTÃO TODOS OK.

    CharlesTI.

    quarta-feira, 2 de março de 2016 14:36
  • Você pode postar a sua query para verificarmos o que deve ser alterado?

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

    quarta-feira, 2 de março de 2016 14:42
  • Sim, claro amigo.

    select distinct EALUNOS.MATRICULA,EALUNOS.NOME,UMATALUN.CODTUR,UMATALUN.PERLETIVO,UMATALUN.CODMAT,UMATERIAS.MATERIA, sum(P1+P2) as 'NOTA'
    from UMATALUN
    inner join EALUNOTPR on umatalun.mataluno=ealunotpr.mataluno and umatalun.perletivo=ealunotpr.perletivo and 
    umatalun.codcur=ealunotpr.codcur and umatalun.codtur=ealunotpr.codtur and umatalun.codmat=ealunotpr.codmat
    inner join EALUNOS on ealunos.MATRICULA=UMATALUN.MATALUNO and EALUNOS.CODCOLIGADA=UMATALUN.CODCOLIGADA
    inner join UMATERIAS on UMATERIAS.CODMAT=UMATALUN.CODMAT
    inner join UMATRICPL on UMATALUN.MATALUNO=UMATRICPL.MATALUNO and UMATALUN.PERLETIVO=UMATRICPL.perletivo and UMATALUN.codcur=UMATRICPL.codcur
    where 
    --UMATALUN.PERLETIVO like 'T%' AND
    UMATALUN.STATUS='ma' and
    EALUNOTPR.CODCUR='53' and
    EALUNOS.MATRICULA='14-1-09673' and UMATRICPL.PERLETIVO='t14-m1'
    GROUP BY EALUNOS.MATRICULA,EALUNOS.NOME,UMATALUN.CODTUR,UMATALUN.PERLETIVO,UMATALUN.CODMAT,UMATERIAS.MATERIA,P1,P2,P3
    order by 3,6 
    


    CharlesTI.

    quarta-feira, 2 de março de 2016 14:47
  • Experimente fazer um teste dessa forma:

    select 
        EALUNOS.MATRICULA,
        EALUNOS.NOME,
        UMATALUN.CODTUR,
        UMATALUN.PERLETIVO,
        UMATALUN.CODMAT,
        UMATERIAS.MATERIA, 
        sum(coalesce(P1, 0) + coalesce(P2, 0) + coalesce(P3, 0)) as 'NOTA'
    from UMATALUN
    inner join EALUNOTPR 
        on 
            umatalun.mataluno = ealunotpr.mataluno and 
            umatalun.perletivo = ealunotpr.perletivo and 
            umatalun.codcur = ealunotpr.codcur and 
            umatalun.codtur = ealunotpr.codtur and 
            umatalun.codmat = ealunotpr.codmat
    inner join EALUNOS 
        on 
            ealunos.MATRICULA = UMATALUN.MATALUNO and 
            EALUNOS.CODCOLIGADA = UMATALUN.CODCOLIGADA
    inner join UMATERIAS 
        on 
            UMATERIAS.CODMAT = UMATALUN.CODMAT
    inner join UMATRICPL 
        on 
            UMATALUN.MATALUNO = UMATRICPL.MATALUNO and 
            UMATALUN.PERLETIVO = UMATRICPL.perletivo and 
            UMATALUN.codcur = UMATRICPL.codcur
    where 
        --UMATALUN.PERLETIVO like 'T%' AND
        UMATALUN.STATUS='ma' and
        EALUNOTPR.CODCUR='53' and
        EALUNOS.MATRICULA = '14-1-09673' and 
        UMATRICPL.PERLETIVO = 't14-m1'
    GROUP BY 
        EALUNOS.MATRICULA,
        EALUNOS.NOME,
        UMATALUN.CODTUR,
        UMATALUN.PERLETIVO,
        UMATALUN.CODMAT,
        UMATERIAS.MATERIA
    order by 
        3, 6 

    Espero que ajude


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

    • Marcado como Resposta CHARLES.PTU quarta-feira, 2 de março de 2016 16:43
    quarta-feira, 2 de março de 2016 15:21
  • Não seria o caso de tratar possíveis valores nulos:

    select EALUNOS.MATRICULA,EALUNOS.NOME,UMATALUN.CODTUR,UMATALUN.PERLETIVO,UMATALUN.CODMAT,UMATERIAS.MATERIA, sum(ISNULL(P1, 0)+ISNULL(P2, 0)+ISNULL(P3, 0)) as 'NOTA'

    E no Group By, tirar P1, P2, P3


    Antero Marques

    quarta-feira, 2 de março de 2016 15:24
  • Muitissimo obrigado Gapimex por ter me ajudado. Sua solução resolveu meu problema. 

    CharlesTI.

    quarta-feira, 2 de março de 2016 16:44