Ir para conteúdo

Recommended Posts

   Boa noite pessoal, tudo bem?

   É o seguinte, estou iniciando na área de SQL (inclusive já peço desculpas pelos possíveis erros) e trabalho montando relatórios para um sistema via SQL.

Estou montando um relatório que envolve algumas tabelas e preciso somar o valor de uma coluna, ocorre que quando uso a função SUM no select com as junções das tabelas ele não me retorna a soma dos valores, se somo sem as junções das tabelas ele me retorna perfeitamente, segue abaixo o script:

 

Script que trás a soma corretamente:

 

SELECT SUM(VALOR)
FROM sophia.MOVFIN 
WHERE VENDA = '14617' AND PARCELA = '2'

Resultado

---------------------------------------
329.0000

(1 linha(s) afetadas)

 

Script onde a soma não funciona corretamente:

                                           
SELECT DISTINCT

T.CODIGO As CODTURMA, 
F.NOME As NOME,
F.CPF As CPF,
T.NOME As TURMA,
S.DESCRICAO As SEGMENTO,
F.CODEXT As RA,
F.OBSERVACOES As OBSERVAÇÃO,
case M.STATUS 
WHEN 0 then 'Ativa'
WHEN 1 then 'Trancada'
WHEN 2 then 'Cancelada'
WHEN 3 then 'Transferida'
WHEN 4 then 'Evadida'
WHEN 5 then 'Concluída' end 
as STATUS,
TAB.DESCRICAO1 As INDICADOPOR,
SUM(MEN.VALOR) As MENSALIDADE

FROM SophiA.TURMAS T

LEFT join sophia.MATRICULA M on M.TURMA_REGULAR = T.CODIGO
LEFT join sophia.FISICA F on F.CODIGO = M.FISICA
LEFT join sophia.DADOSPF DF on DF.FISICA = F.CODIGO
LEFT join sophia.SEGMENTOS S on S.CODIGO = DF.SEGMENTO
LEFT join sophia.TAB_DESCRICAO_DADOS TAB on TAB.FISICA = F.CODIGO
LEFT join sophia.MOVFIN MOV ON MOV.VENDA = M.VENDA and MOV.PARCELA = '2'
LEFT join sophia.MOVFIN MEN ON MEN.TITULO = MOV.TITULO

WHERE T.CODIGO = '2214' 

GROUP BY 
T.CODIGO,
F.NOME,
F.CPF,
T.NOME,
S.DESCRICAO,
F.CODEXT,
F.OBSERVACOES,
M.STATUS, 
TAB.DESCRICAO1,
MEN.VALOR                                                                                                                                                                                                                                                                                                                                                                

   Desta forma, basicamente trás como resultado os três registros (mesma quantidade de registro que existe na tabela para estas condições)  com números bem diferentes do registro real, não consegui associar os números a uma referencia para entender o que ocorre. Talvez algo que seja relevante mencionar é que pode-se conter números negativos nos registros, inclusive nessas colunas deste duas querys existem números negativos. 

 

Agradeço muito a atenção de todos! :) 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 17/11/2017 at 21:40, otaviinn disse:

SELECT --DISTINCT  -->> O GROUP BY Já faz isso

T.CODIGO As CODTURMA, 
F.NOME As NOME,
F.CPF As CPF,
T.NOME As TURMA,
S.DESCRICAO As SEGMENTO,
F.CODEXT As RA,
F.OBSERVACOES As OBSERVAÇÃO,
case M.STATUS 
WHEN 0 then 'Ativa'
WHEN 1 then 'Trancada'
WHEN 2 then 'Cancelada'
WHEN 3 then 'Transferida'
WHEN 4 then 'Evadida'
WHEN 5 then 'Concluída' end 
as STATUS,
TAB.DESCRICAO1 As INDICADOPOR,
SUM(MOV.VALOR) As MENSALIDADE

FROM SophiA.TURMAS T

LEFT join sophia.MATRICULA M on M.TURMA_REGULAR = T.CODIGO
LEFT join sophia.FISICA F on F.CODIGO = M.FISICA
LEFT join sophia.DADOSPF DF on DF.FISICA = F.CODIGO
LEFT join sophia.SEGMENTOS S on S.CODIGO = DF.SEGMENTO
LEFT join sophia.TAB_DESCRICAO_DADOS TAB on TAB.FISICA = F.CODIGO
LEFT join sophia.MOVFIN MOV ON MOV.VENDA = M.VENDA and MOV.PARCELA = '2' and MOV.
--LEFT join sophia.MOVFIN MEN ON MEN.TITULO = MOV.TITULO  -->> Mesma tabela que a MOV

WHERE T.CODIGO = '2214' 

GROUP BY 
T.CODIGO,
F.NOME,
F.CPF,
T.NOME,
S.DESCRICAO,
F.CODEXT,
F.OBSERVACOES,
M.STATUS, 
TAB.DESCRICAO1,
--MEN.VALOR -->> Não se informa o valor somado no GROUP BY 

 

Olá otaviin,

 

Fiz algumas modificações em sua QUERY, verifica se é o que você quer.

  • Obrigado! 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 22/11/2017 at 11:07, Christian Gonçalves disse:

 

Olá otaviin,

 

Fiz algumas modificações em sua QUERY, verifica se é o que você quer.

 

Boa noite Christian, muito obrigado por sua resposta!

 

Na verdade não, o resultado continuo o mesmo (Valores diferentes do esperado)

 

Após conferir novamente junção por junção descobri que o problema estava na tabela TAB_DESCRICAO_DADOS que por padrão sempre terá 10 registros, nulos ou não, então o valor vinha "multiplicado" por 10.

 

A solução foi apontar exatamente qual registro eu previsava, assim a junção dela não vinha com 10 registros e ele me apresentava o calor corretamente.

 

Mais uma vez muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por edyr0x
      Alguém poderia me ajudar a gerar uma relátório em php?
      preciso gerar uma tabela com total de bolsas vendidas por mês.  com total de cada modelo de bolsa fabricada por mês e total geral
      até consegui, porém gostaria de gerar com os meses nas colunas e só consegui gerar com os meses nas linhas... 
      tentei da seguinte forma:
       
      $link = $conexao;
      $consultar = "SELECT SUM(`resumo_bolsas_80`) AS m80, 
             SUM(`resumo_bolsa_12`) AS m12,
            SUM(`resumo_bolsa_20`) AS m20,
             SUM(`resumo_bolsa_40`) AS m40,
              SUM(`resumo_bolsa_90`) AS m90, 
               SUM(`resumo_bolsa_38`) AS m38, 
             MONTHNAME(resumo_data) AS `mes` 
      FROM  resocor
      GROUP  BY YEAR(`resumo_data`), 
                MONTH(`resumo_data`)"; 
      $resulta = mysqli_query($link, $consultar);
       
      ################## codigo php #######################
      <table>
            <tr>
                  <th class="tg-sg5v">MES</th>
                  <th class="tg-sg5v">80</th>
                  <th class="tg-sg5v">12</th>
                  <th class="tg-sg5v">20</th>
                  <th class="tg-sg5v">40</th>
                  <th class="tg-sg5v">90</th>
                  <th class="tg-sg5v">38</th>
              </tr>
              <?php 
                  foreach ($resulta as $row) {
              ?>
                  <tr>
                     
                      <td class="tg-0w8i"><?php echo $row['mes']; ?></td>
                      <td class="tg-0w8i"><?php echo $row['m80']; ?></td>
                       <td class="tg-0w8i"><?php echo $row['m12']; ?></td>
                       <td class="tg-0w8i"><?php echo $row['m20']; ?></td>
                       <td class="tg-0w8i"><?php echo $row['m40']; ?></td>
                       <td class="tg-0w8i"><?php echo $row['m90']; ?></td>
                       <td class="tg-0w8i"><?php echo $row['m38']; ?></td>
                  </tr>
              <?php  }     ?>
       </table
       
      SEGUE TABELA ANEXADA DE COMO GOSTARIA QUE APARECESSE NO RELATORIO
       
       

    • Por will_jdc
      Boa Tarde a todos, 
      Tenho um programa Windows desktop que utiliza o SQL SERVER como fonte de dados, os usuários iniciam o programa que se conecta ao SQL Server. 
      Após o programa fazer o Login no sql server, o usuário insere a senha do sistema para acessar as informações na base de dados, porém quando ele coloca a senha do sistema, o programa fica processando e acaba que não respondendo, como faço para verificar no SQL Server o que esta impedindo o acesso as informações ?
    • Por lemanoel
      oi, sou novo por aqui! desculpe se a pergunta é muito simples.... tenho duas tabelas:
      TABELA: atendimento: cd_item data_atend nome_cliente TABELA: documento_clinico cd_doc cd_item data_doc  
      o tenho a relação 1 atendimento para muitos docs. Quero criar um código que diz o número do atendimento e a data do doc mais antigo (apenas 1).  todas as tentativas duplicam o nome do cliente
    • Por Elizandro Oliveira
      Bom Dia,
       
      Tenho 10 colunas de Siglas de Defeito, e 10 Colunas de quantidade de cada defeito,
      D1 = Defeito
      Q1 = Quantidade de Defeitos D1
      D2 = Defeito
      Q2 = Quantidade de Defeitos D2
      e assim por diante;
       
      D1 pode conter as siglas C1, C2, C3, C4 até C40
      D2  pode conter as siglas C1, C2, C3, C4 até C40
      D3  pode conter as siglas C1, C2, C3, C4 até C40
      e assim por diante
      Vejam a imagem em anexo;
       
      Preciso verificar as colunas e somar todos os defeitos de cada tipo, ranqueando as 3 maiores quantidades de defeitos, como na imagem anexo.
       
      Podem me dar uma ajuda com isso.
       
      Obrigado pela atenção;
       
       

    • Por leardini
      Boa noite.
       
      Tenho uma consulta feita em PHP que mostra em uma table o resultado, e preciso que essa consulta o Valor do Campo "ID"  passe para uma Variável para que eu possa usar em outra consulta.
       
      Não consegui muita informação para o tipo de conexão que estou usando SQL Server e não My SQL, e é uns de meus primeiros códigos.
       
      Desde já agradeço a atenção!
       
      $rank = odbc_exec($connection, $verifica); if($pg == 1 or $pg == 0){ $i = 1; }elseif($pg > 1){ $i = $ini+1; } while($dados = odbc_fetch_array($rank)) { $id=$i+1; // AQUI OCORRE O PROBLEMA $idmomb = .$dados['id']; echo ($i % 2) ? "<tr>" : "<tr>"; echo '<td><center>'.$dados['ID'].'</center></td>'; echo '<td><center>'.$dados['MonsterName'].'</center></td>'; echo '<td><center>'.$dados['PublicDrop'].'</center></td>'; echo '<td><center>'.$dados['Quantity'].'</center></td>'; echo '</tr>'; $i++; } echo '</table>';  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.