Jump to content
Sign in to follow this  
rtfacincani

Consulta com sub-consultas e agregações

Recommended Posts

Prezados, necessito gerar uma consulta ao banco de dados Oracle e estou enfrentando dificuldades em retornar valores. Abaixo vou explicar como as tabelas estão montadas

 

Tab1:NotaFiscal

codnota,datanota,codveiculo,datasaida,datachegada

 

Tab2:Combustivel

codveiculo,dataabastecimento,kmpercorrido,qtdlitros,medialistros

 

O que preciso? Preciso saber dentro do período da NotaFiscal, qual o veículo que entre a datasaida e datachegada, foram abastecidos, e qual o total de kilometros percorridos entre as datas de saida e chegada da notafiscal.

 

A saída ficaria assim:

 

codnota,datanota,codveiculo,totalkmpercorrido,totalqtdlitros,medialitros.

 

Tentei algo assim, mas não deu certo estou tendo esta dificuldade:

 

select n.codnota,n.datanota,n.codveiculo,sum(c.totalkmpercorrido) as totalkmpercorrido,sum(c.totalqtdlitros) as totalqtdlitros,avg(c.medialitros) as medialitros from notafiscal n inner join combustivel c on n.codveiculo = c.codveiculo

where c.dataabastecimento between n.datasaida and n.datachegada

group by codnota,datanota,codveiculo

 

Porém não estou conseguindo retornar os valores, principalmente por não ter em combustível o motivo para o abastecimento, visto que pode ser que seja uma viagem e entre a datasaida e datachegada pode existir vários abastecimentos e a única coisa que tenho para ligar é o código do veículo e as datas de saída e chegada emitida pela nota.

 

Será que alguém poderia me auxiliar com essa consulta?

 

 

 

Share this post


Link to post
Share on other sites

O que há de errado com o seu sql !?

 

 

Parece-me um problema de modelo , a NF se refere a compra do combustivel ou a ao frete ?

 

O kmpercorridido se refere ao abastecimento em questao ou ao anterior ?

 

O sql parece 'certo' , o modelo nem tanto.

Share this post


Link to post
Share on other sites

O que há de errado com o seu sql !?

 

 

Parece-me um problema de modelo , a NF se refere a compra do combustivel ou a ao frete ?

 

O kmpercorridido se refere ao abastecimento em questao ou ao anterior ?

 

O sql parece 'certo' , o modelo nem tanto.

Motta, obrigado por responder, mas a consulta em questão é referente a um modelo onde é emitida uma nota fiscal de compra ou serviço, e o abastecimento é referente ao abastecimento de caminhões que farão o serviço.

 

Quanto ao km percorrido se refere ao abastecimento em uma data específica que pode ou não estar entre a data de saida e chegada, pois o caminhão faz diversos abastecimentos e pode não ter a ver com a nota em questão, por isso que estou atrelando ao período da saida e chegada da nota, qualquer abastecimento entre estas datas, subentende-se que pode estar atrelado a nota em questão, porém não é garantido.

 

uma coisa que acontece é que ao incluir o número da nota, na pesquisa, ele acaba fazendo um plano cartesiano e colocando todas as notas mesmo não estando envolvidos.

 

Não sei se errei ao montar a estrutura, mas faço uma busca em uma terceira tabela que é uma tabela de ligação, onde contém o numero da nota, o código do veículo e a ordem de serviço, então faço a ligação apenas do código do veículo que é a única coisa que ambas as tabelas tem em comum, visto que o número da nota não está envolvida.

 

Esta tabela de ligação é composta pelos seguintes campos:

 

tabela 3:

 

codordemserviço, codveiculo, codnota

 

tabela 4

codveiculo, placa,modelo, chassi

 

levando em consideração que a tabela de veículo tem a placa do veículo e o seu código e a tabela de abastecimento tem a placa do veículo, mas não o código do veículo, faço uso desta terceira tabela para descobrir o código do veículo para montar a estrutura.

 

Não passei essa informação pois achei que o problema não estaria ai, e sim no group by ou sum.

 

Mas a estrutura real é assim. são quatro tabelas onde eu tenho a tabela da nota fiscal, a tabela de abastecimento com a placa do veículo, a tabela de veículo que tem o código do veiculo e a sua placa e a tabela de ligação que tem o numero da nota, o código do veículo e o numero da ordem de atendimento, porém em abastecimento só tenho a placa do veículo.

 

A questão da kilometragem e a quantidade de litros, toda a vez que o caminhão faz o abastecimento é planilhado a informação e posteriormente lançado no sistema. Mas tenho que descobrir quanto que uma nota "paga" para abastecer o caminhão para realizar o seu percurso, por isso é que tenho que fazer essa ligação, mas infelizmente não tem como pegar na planilha do lançamento de abastecimento qual foi a nota que aquele caminhão naquela data está atendendo.

 

Peço a sua ajuda a fim de tentar me ajudar nesta descoberta.

 

Atenciosamente,

 

Ricardo

Share this post


Link to post
Share on other sites

Capture mais um dado ,

 

Codnota

Kminicialnf

Kmfinalnf

 

Com isto ao menos se tem o quanto um veiculo rodou por nf

 

 

Uma pergunta , mais de um veiculo pode atender uma NF ?

Share this post


Link to post
Share on other sites

Capture mais um dado ,

 

Codnota

Kminicialnf

Kmfinalnf

 

Com isto ao menos se tem o quanto um veiculo rodou por nf

 

 

Uma pergunta , mais de um veiculo pode atender uma NF ?

Sim, uma nota pode ter vários veículos atendendo. Por isso que uma nota tem ordem de serviço que é a ordem para que um caminhão vá pegar a carga em outro lugar. As informações de KMInicial, e KMFinal, já são calculados e lançados no sistema pelo KM Percorrido no abastecimento, por isso não preciso informar

Share this post


Link to post
Share on other sites

Tá mas você não tem em combustivel

 

Imagino algo do tipo , dia 1 o caminhão é abastecido,

 

codveiculo dataabastecimento kmpercorrido qtdlitros medialistros

1 1/x/16 100 80 xx..xx

mesmo sem OS

 

no dia 2 ele faz a OS 1,2,e 3

ainda com combustivel ele faz a OS 4 , mas faz um reabastecimento neste dia

seria algo do tipo

OS kminicial kmfinal

1 100 102

2 102 110

3 110 117

...

 

Na minha opinião seria mais correto ter os km inicial e final de cada OS , além das do abastecimento

com isto seria possível saber que o veiculo x rodou y kms para a OS z

 

Calculando o custo médio deste veiculo (preço médio * litros / km rodados) seria

possivel calcular o custo do combustível na OS

 

Senão não se tem a informação do "custo de combustivel da OS" , pois numa OS o caminhao pode ir no bairro

na outra no outro lado da cidade

 

Espero ter ajudado

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By mamotinho
      Olá, pessoal mais uma vez venho pedi a ajuda de vocês estou com um problema ao roda uma query que montei, eu sou iniciante na area e não tenho muito conhecimento então o codigo que fiz foi parte de meu conhecimento básico. bom o que eu quero resolver nessa query é o seguinte, eu quero consultar uma tabela e nela pega todos os registros com a a data vencida e lista ela dentro do while em seguida retornar dentro desse if o valor da coluna de cada uma exemplo de como fiz e ficou com loop infinito.

       
      declare @id int declare @getdate datetime select @id = IDCadastrado, @getdate = RegDate from BancoTeste.dbo.MinhaTabela where RegDate < getdate() while @id is not null begin select * from BancoTeste.dbo.MinhaTabela where IDCadastrado = @id end quando eu executo isso ai ele executa infinitamente o valor do primeiro registro repetidamente.
    • By Rodymb
      Bom dia!
      Estou fazendo um select em uma tabela de cupom fiscal e preciso que me mostre o operador do caixa e o supervisor que liberou a venda, que no caso é convênio.
      A consulta que montei é a seguinte:
       
      select  c.m00ad as CUPOM,
              c.m00ac as PDV,
              c.m02ak as VALOR,
              p.descricao as FINALIZADORA,
              c.m02ah as OPERADOR,
              f.nome as NOME_OP,
              c.m02ao as SUPERVISOR,
              f.nome as NOME_SUP
      from zan_m02 c inner join tab_funcionario f
      on c.m02ao = f.cod_funcionario
      inner join tab_finalizadora p
      on c.m02ai = p.cod_finalizadora
      where c.m00af = to_date('09/03/20','dd/mm/yy')
      and c.m00za = 3
      and c.m00ac = 9
      and c.m00ad = 379678
      group by c.m00ad,c.m00ac,c.m02ak,p.descricao,c.m02ah,f.nome,c.m02ao;
       
      A consulta me retorna o seguinte resultado:

       
      Como podem ver, repetiu o mesmo nome (operador e supervisor), sendo que o código é diferente.
       
      Isso acontece por que na tabela de funcionário o campo NOME serve para operador e supervisor e o que diferencia se é supervisor ou operador temos mais duas outras tabelas. A estrutura é assim:
       
      tab_funcionario -> temos o campo cod_funcionario e nome (todos os funcionários cadastrados são armazenados nessa tabela)
      tab_perfil -> temos os campos cod_perfil e descricao (todos os perfis cadastrados são armazenados nessa tabela)
      tab_perfil_funcionario -> temos os campos cod_funcionario e cod_perfil (tabela que relaciona as tabelas tab_funcionario e tab_perfil)
       
      A única coisa que preciso é que apareça no NOME_OP o nome do operador e não o nome do supervisor igual está aparecendo.
       
    • By agness
      a imagem é uma parte de uma tabela extensa.
      como eu faço uma consulta por exemplo para jogador igual à 1, 3, 5 e liga igual à 1?
      isso é para uma verificação se existe uma liga com exatamente os jogadores 1, 3 e 5, nem mais nem menos
      espero ter sido claro
    • By maxsybam
      Fala pessoal, eu estou desenvolvendo um sistema de estoque para a minha universidade para o meu TCC.
      Neste sistema tenho telas de consultas. Em uma das consultas seria uma consulta por um item especifico, fiz um select para selecionar qual o item a ser consultado no banco, mas na hora que clico no botão de consultar, ele está trazendo todos os itens cadastrados e eu gostaria que voltasse só o que está relacionado ao que foi selecionado.
       
      CÓDIGO DO SELECT
       
      <form action="item_resultado.php" action="POST">
        <b></br></br>
         Item <select name="item">
           <?php
            require_once("connect.php");
            $con_bd = connect();
            $select_catergoria= "SELECT * FROM tb_item";
            $result = mysqli_query($con_bd,$select_catergoria);
            if ($result){
              foreach($result as $item1){
              echo"<option value='".$item1['id_item']."'>".$item1['desc_item']."</option>";
            }
            }
            ?>
         </select><label>
        </b>
        </br></br><input type="submit" name="btconsultar" value="Consultar">
          </form>
       
       
       
       
      CÓDIGO DA TELA item_resultado.php
       
      <div class="corpo">
          <?php
      require_once("connect.php");
      $conbd=connect();
      if(empty($modelo)){
        $consulta="SELECT * FROM tb_item";
      }else{
        $consulta="SELECT * FROM tb_item INNER JOIN tb_categoria ON categoria_item=nome_categoria WHERE desc_item AND alc_item AND volume_item AND responsavel_item AND guia_item AND safra_item AND obs_item";
      }
      $consultando=mysqli_query($conbd,$consulta);
      echo "<table id='tabela'><tr><th>Item</th><th>Categoria</th><th>%ALC</th><th>Volume</th><th>Responsável</th><th>Guia</th><th>Safra</th><th>Observação</th></tr>";
      foreach ($consultando as $result_consult) {
        echo "<tr><td>" . $result_consult['desc_item'] . "</td>";
        echo "<td>" . $result_consult['categoria_item'] . "</td>";
        echo "<td>" . $result_consult['alc_item'] . "</td>";
        echo "<td>" . $result_consult['volume_item'] . "</td>";
        echo "<td>" . $result_consult['responsavel_item'] . "</td>";
        echo "<td>" . $result_consult['guia_item'] . "</td>";
        echo "<td>" . $result_consult['safra_item'] . "</td>";
        echo "<td>" . $result_consult['obs_item'] . "</td></tr>";
      }
      echo "</table>";
      ?>
      </div>
    • By FabianoSouza
      Tenha a tab A (tabela pai) e a tab B (tabela filha).
      Quero saber como "mesclar" num SELECT os valores de um campo específico da tabela B com os campos já exibidos da tabela A numa única linha.
       
      Que ficasse uma linha mais ou menos assim:
       
      LINHA:
      _______________________________________________________________________________________________________________
      NomeCompleto (da tab A) | Salario (da tab A) | Idade (da tab A) | Fotos (foto1.jpg, foto2.jpg, foto3.jpg... da tab B)
      _______________________________________________________________________________________________________________
       
       
      O caractére separador no campo Fotos por ser vírgula, hífen, etc.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.