Problemas com consulta SQLServer

22 respostas
A
Boa tarde Pessoal tenho a seguinte consulta no SQLServer 2005
select
      ROW_NUMBER() over(order by year(ede.data)) as 'CLASSIFICAÇÃO',
      eee.nome                        as 'NOME',
      ede.valortot                     as 'TOTAL A PAGAR',
      uuu.nomecurso                 as 'CURSO',
      mt.codturma                     as 'TURMA',
      eee.telefone                     as 'TELEFONE',

from eee,
     uuu,
     mt,
     mtcpl,
     ede,
     fl
where
      mtcpl.status    = 'MA'
  and ede.valorpago  = 0
  and ede.valortot > 0.00
  and ede.datapag is null
  and fl.valorbaixado   = 0.0000
  and fl.datapag is null
  and fl.databaixa is null  
  and mtcpl.mataluno  = eee.matricula
  and mtcpl.mataluno  = mt.mataluno
  and mtcpl.perletivo = mt.perletivo  
  and mtcpl.codcur    = mt.codcur
  and mtcpl.grade     = mt.grade
  and mtcpl.codcur    = uuu.codcur
  and mtcpl.mataluno  = ede.mataluno
  and mtcpl.perletivo = ede.perletivo
  and mtcpl.codcur    = ede.codcur
  and mt.mataluno   = ede.mataluno
  and mt.perletivo  = ede.perletivo
  and mt.codcur     = ede.codcur
  and mt.mataluno   = eee.matricula
  and mt.codcur     = uuu.codcur
  and ede.mataluno   = eee.matricula
  and ede.codcur     = uuu.codcur
  and ede.codlanc    = flan.idlan
group by eee.nome,
         ede.valortot,
         year(ede.data),
         uuu.nome,
         mt.codtur,
         eee.telaluno
Ao executar a clausula ela retorna o seguinte resultado
CLASIFICAÇÃO |                  NOME                          TOTAL A PAGAR |     CURSO                 | TURMA
----------------------------------------------------------------------------- ------------------------------ 
1                         JOÃO CALOS SOUZA                     283.00                   INFORMÁTICA         ALFA
2                         JOÃO CALOS SOUZA                     283.00                   INFORMÁTICA         ALFA
3                         JOÃO CALOS SOUZA                     283.00                   INFORMÁTICA         ALFA
4                         JOÃO CALOS SOUZA                     283.00                   INFORMÁTICA         ALFA
5                         MARIA PAULA ALVES OLIVEIRA     337.00                    TESOURARIA          GAMA_1
6                         MARIA PAULA ALVES OLIVEIRA     337.00                    TESOURARIA          GAMA_2
7                         MARIA PAULA ALVES OLIVEIRA     726.00                    TESOURARIA          GAMA_1
8                         MARIA PAULA ALVES OLIVEIRA     726.00                    TESOURARIA          GAMA_2
agora eu tenho que calcular o total a pagar de JOÃO CALOS SOUZA e MARIA PAULA ALVES OLIVEIRA, utilizando somente a função SUM(ede.valortot) não ta dando. utilizando a SUM(ede.valortot) o resultado aparece da seguinte maneira.:
CLASIFICAÇÃO |                  NOME                          TOTAL A PAGAR |     CURSO                 | TURMA
----------------------------------------------------------------------------- ------------------------------ 
1                         JOÃO CALOS SOUZA                    5660.00                   NFORMÁTICA         ALFA
5                         MARIA PAULA ALVES OLIVEIRA     1011.00                    TESOURARIA          GAMA_1
6                         MARIA PAULA ALVES OLIVEIRA     1011.00                    TESOURARIA          GAMA_2
7                         MARIA PAULA ALVES OLIVEIRA     4356.00                    TESOURARIA          GAMA_1
Ainda da soma está errada depois de inserir o SUM(ede.valortot), MARIA PAULA ALVES OLIVEIRA está aparecendo mais de uma vez com valores distintos.. ja tentei todas as formas aqui e não conseguir...

22 Respostas

DaniloAndrade

ta diferente porque a maria esta em turmas distintas,

mas pode te mais alguma coisa, mas eu não vi.

na clausulas do seu select esta retornando o telefone tambem mas no resultado que vc postou eles não aparecem, porque?

A

DaniloAndrade:
ta diferente porque a maria esta em turmas distintas,

mas pode te mais alguma coisa, mas eu não vi.

na clausulas do seu select esta retornando o telefone tambem mas no resultado que vc postou eles não aparecem, porque?


ESqueci de colocar os telefones
JOÃO CALOS SOUZA = 9987-8854
MARIA PAULA ALVES OLIVEIRA = 8874-5532

DaniloAndrade

roda novamente e coloca o resultado de novo com o telefone tambem

DaniloAndrade
CLASIFICAÇÃO |                  NOME                          TOTAL A PAGAR |     CURSO                 | TURMA  
----------------------------------------------------------------------------- ------------------------------   
1                         JOÃO CALOS SOUZA                    5660.00                   NFORMÁTICA         ALFA  
5                         MARIA PAULA ALVES OLIVEIRA     1011.00                    TESOURARIA          GAMA_1  // pode estar em anos diferentes
6                         MARIA PAULA ALVES OLIVEIRA     1011.00                    TESOURARIA          GAMA_2  
7                         MARIA PAULA ALVES OLIVEIRA     4356.00                    TESOURARIA          GAMA_1  // pode estar em anos diferentes

//sera que não tem algum problema na função do ano

deixa ele agrupando por ano mas tira a classificação e mostra o ano no lugar e

A

CLASIFICAÇÃO | NOME TOTAL A PAGAR | CURSO | TURMA | TELEFONE ----------------------------------------------------------------------------- ------------------------------ ----------------------------- 1 JOÃO CALOS SOUZA 283.00 INFORMÁTICA ALFA 9987-8854 2 JOÃO CALOS SOUZA 283.00 INFORMÁTICA ALFA 9987-8854 3 JOÃO CALOS SOUZA 283.00 INFORMÁTICA ALFA 9987-8854 4 JOÃO CALOS SOUZA 283.00 INFORMÁTICA ALFA 9987-8854 5 MARIA PAULA ALVES OLIVEIRA 337.00 TESOURARIA GAMA_1 8874-5532 6 MARIA PAULA ALVES OLIVEIRA 337.00 TESOURARIA GAMA_2 8874-5532 7 MARIA PAULA ALVES OLIVEIRA 726.00 TESOURARIA GAMA_1 8874-5532 8 MARIA PAULA ALVES OLIVEIRA 726.00 TESOURARIA GAMA_2 8874-5532

DaniloAndrade

outra coisa quando vc coloca sum(ede.valortot) vc tem que tira o ede.valortot do group by, mas eu não tenho certeza, faz muito tempo que eu não faço query na mão rsrs, faz um teste e ve o que acontece

A

a soma continua errada

DaniloAndrade

vc tirou o ede.valortot do group by? fiz um teste rapido aqui e o resultado com o campo que vc esta somando no group by da diferença

A

Tirei…

DaniloAndrade

executa essa query e depois posta o resultado

select  
      year(ede.data)                 as 'Ano',  
      eee.nome                        as 'NOME',  
      ede.valortot                     as 'TOTAL A PAGAR',  
      uuu.nomecurso                 as 'CURSO',  
      mt.codturma                     as 'TURMA',  
      eee.telefone                     as 'TELEFONE',  
  
from eee,  
     uuu,  
     mt,  
     mtcpl,  
     ede,  
     fl  
where  
      mtcpl.status    = 'MA'  
  and ede.valorpago  = 0  
  and ede.valortot > 0.00  
  and ede.datapag is null  
  and fl.valorbaixado   = 0.0000  
  and fl.datapag is null  
  and fl.databaixa is null    
  and mtcpl.mataluno  = eee.matricula  
  and mtcpl.mataluno  = mt.mataluno  
  and mtcpl.perletivo = mt.perletivo    
  and mtcpl.codcur    = mt.codcur  
  and mtcpl.grade     = mt.grade  
  and mtcpl.codcur    = uuu.codcur  
  and mtcpl.mataluno  = ede.mataluno  
  and mtcpl.perletivo = ede.perletivo  
  and mtcpl.codcur    = ede.codcur  
  and mt.mataluno   = ede.mataluno  
  and mt.perletivo  = ede.perletivo  
  and mt.codcur     = ede.codcur  
  and mt.mataluno   = eee.matricula  
  and mt.codcur     = uuu.codcur  
  and ede.mataluno   = eee.matricula  
  and ede.codcur     = uuu.codcur  
  and ede.codlanc    = flan.idlan  
group by eee.nome,  
         year(ede.data),  
         uuu.nome,  
         mt.codtur,  
         eee.telaluno
A

A diferença que ao invés de aparecer o rank aparece o ano…

A

Ai galera, eu conseguir chegar no resultado ‘Parcial’[u] que quero com essa consulta, porem quando retiro os comentários abaixo para aparecer a turma o resultado fica errado, e a turma da pessoa tem que aparecer, me da um help ai…

select ROW_NUMBER() over(order by year(ede.data)) as 'CLASSIFICAÇÃO', eee.nome as 'NOME', sum(ede.valortot) as 'TOTAL A PAGAR', case when mtcpl.codcur = 1 then 'DIREITO' when mtcpl.codcur = 3 then 'MEDICINA' when mtcpl.codcur = 5 then 'SISTEMAS DE INFORMAÇÃO' when mtcpl.codcur = 6 then 'NUTRIÇÃO' when mtcpl.codcur = 7 then 'ADMINISTRAÇÃO' when mtcpl.codcur = 8 then 'EDUCÃÇÃO FÍSICA' end as 'CURSO', //turma.codtur as 'TURMA', // <-- TENHO QUE COLOCAR ESSA LINHA isnull(ealunos.telaluno,'-') as 'TELEFONE' from eee, mtcpl, //turma, // <-- TENHO QUE COLOCAR ESSA LINHA ede where mtcpl.status = 'MA' and ede.valorpago = 0 and ede.valortot > 0.00 and ede.datapag is null and mtcpl.mataluno = eee.matricula and mtcpl.mataluno = ede.mataluno and mtcpl.perletivo = ede.perletivo and mtcpl.codcur = ede.codcur // and mtcpl.perletivo = turma.codperlet //and mtcpl.codcur = turma.codcur group by eee.nome, YEAR(ede.data), eee.telaluno, mtcpl.codcur //turma.codtur // <-- TENHO QUE COLOCAR ESSA LINHA

emanuelmm

Quando você usa o GROUP BY você está organizando os dados em GRUPOS para sumarizar alguma coisa. Se você colocar a coluna TURMA novamente, vai encontrar dois totalizadores para MARIA, um referente a GAMA_1 e outro referente a GAMA_2 e se vc tira-lo do GROUP BY ele vai totalizar, ignorando a turma dele.

Nao tem como vc colocar turma para aparecer na tupla, sem colocar TURMA no group by.

A

emanuelmm:
Quando você usa o GROUP BY você está organizando os dados em GRUPOS para sumarizar alguma coisa. Se você colocar a coluna TURMA novamente, vai encontrar dois totalizadores para MARIA, um referente a GAMA_1 e outro referente a GAMA_2 e se vc tira-lo do GROUP BY ele vai totalizar, ignorando a turma dele.

Nao tem como vc colocar turma para aparecer na tupla, sem colocar TURMA no group by.


Pois é cara, eu tenho que colocar essa turma ai, não é por conta minha, foi solicitado para coloca-la!
Tenho que arrumar uma maneria de inserir essa turma no select

emanuelmm

Entrao você vai ter que agrupar por turma… e ter os totalizadores da turma GAMA_1 e turma GAMA_2.

A

Mesmo assim vai continuar aparecendo as duas MARIA e os totais errados das tuplas!!
=/

emanuelmm

Exatamente, pq vc tem duas turmas, se agrupar por turma vai mostrar o total da GAMA_1 e o total da GAMA_2. =]

A

Agrupando por turma, ainda do resultado do total a pagar aparecer todo errado, aparece mais de uma vez a mesma linha!!!

emanuelmm

coloca turma no order by também

A

Com essa correção ai eu conseguir chegar no resultado ‘Parcial’[u] que quero com essa consulta, porem com alguns erros.:
1)Se rodar essa query ai aparece o seguinte resultado

1 ISIS PONCIANO DE ALMEIDA 1132.00 ADMINISTRAÇÃO (38) 3671.3781
2 SILÊIDE SILVA GAMA 1811.20 ADMINISTRAÇÃO (38) 9919.5316
3 DIEGO LIMA ROCHA 4048.75 MEDICINA ([telefone removido]
4 JONATTA SANTANA ALVES OLIVEIRA 741.00 NUTRIÇÃO ([telefone removido]
5 SILÊIDE SILVA GAMA 2639.28 ADMINISTRAÇÃO (38) 9919.5316
6 WELLINGTTON JOSÉ DA SILVA BORGES 5367.00 DIREITO ([telefone removido]
7 ISABELA GURGEL ZOCCOLI 17490.00 MEDICINA ([telefone removido]
8 PRISCILA REIS BRANT 1960.00 DIREITO -
9 RENATA BATISTA ALVES PIMENTA 1161.45 NUTRIÇÃO -
O primeiro problema dessa é que Sirleideaparece duas vezes com valores totais diferentes.

  1. Se retirar os comentários referentes a tabelam turma, o resultado é o seguinte.:
    1 ISIS PONCIANO DE ALMEIDA 5660.00 ADMINISTRAÇÃO ADM1ANA 38 3671.3781
    2 ISIS PONCIANO DE ALMEIDA 6792.00 ADMINISTRAÇÃO ADM3ANA 36 71.3781
    3 ISIS PONCIANO DE ALMEIDA 5660.00 ADMINISTRAÇÃO ADM4ANA 38 3671.3781
    4 ISIS PONCIANO DE ALMEIDA 1132.00 ADMINISTRAÇÃO ADM4BNA 38 3671.3781
    5 SILÊIDE SILVA GAMA 9056.00 ADMINISTRAÇÃO ADM1ANA (38) 9919.5316
    6 SILÊIDE SILVA GAMA 9056.00 ADMINISTRAÇÃO ADM2ANA (38) 9919.5316
    7 SILÊIDE SILVA GAMA 9056.00 ADMINISTRAÇÃO ADM2GNA (38) 9919.5316
    8 SILÊIDE SILVA GAMA 10867.20 ADMINISTRAÇÃO ADM3ANA (38) 9919.5316
    9 SILÊIDE SILVA GAMA 9056.00 ADMINISTRAÇÃO ADM4ANA (38) 9919.5316
    10 SILÊIDE SILVA GAMA 1811.20 ADMINISTRAÇÃO ADM4BNA (38) 9919.5316
    Totalmente errado…

Query

select ROW_NUMBER() over(order by year(ede.data)) as 'CLASSIFICAÇÃO', eee.nome as 'NOME', sum(ede.valortot) as 'TOTAL A PAGAR', case when mtcpl.codcur = 1 then 'DIREITO' when mtcpl.codcur = 3 then 'MEDICINA' when mtcpl.codcur = 5 then 'SISTEMAS DE INFORMAÇÃO' when mtcpl.codcur = 6 then 'NUTRIÇÃO' when mtcpl.codcur = 7 then 'ADMINISTRAÇÃO' when mtcpl.codcur = 8 then 'EDUCÃÇÃO FÍSICA' end as 'CURSO', //turma.codtur as 'TURMA', // <-- TENHO QUE COLOCAR ESSA LINHA isnull(ealunos.telaluno,'-') as 'TELEFONE' from eee, mtcpl, //turma, // <-- TENHO QUE COLOCAR ESSA LINHA ede, fl where mtcpl.status = 'MA' and fl.valorbaixado = 0.0000 and fl.datapag is null and fl.databaixa is null and ede.valorpago = 0 and ede.valortot > 0.00 and ede.datapag is null and mtcpl.mataluno = eee.matricula and mtcpl.mataluno = ede.mataluno and mtcpl.perletivo = ede.perletivo and mtcpl.codcur = ede.codcur // and mtcpl.perletivo = turma.codperlet //and mtcpl.codcur = turma.codcur and ede.codlanc = fl.idlan and fl.statuslan not in (0) group by eee.nome, YEAR(ede.data), eee.telaluno, mtcpl.codcur //turma.codtur // <-- TENHO QUE COLOCAR ESSA LINHA

emanuelmm

isso que você tá fazendo é um relatório, uma grid o que é?

pq tu nao faz os subtotais por turma e um totalizador geral no final ?

A

emanuelmm:
isso que você tá fazendo é um relatório, uma grid o que é?

pq tu nao faz os subtotais por turma e um totalizador geral no final ?


é Relatório… e ainda por cima foi solicitado dessa maneira ai, se fosse por turma sería fácil…

Criado 24 de janeiro de 2013
Ultima resposta 25 de jan. de 2013
Respostas 22
Participantes 3