Join entre 2 tabelas com filtros
08/01/2016
0
Obs.: Utilizo Delphi 7 e Firebird 2.5.
Tabela PEDIDOS
CODPEDIDO
DTPEDIDO
STATUS
Tabela PEDIDOITENS
NRPEDIDO
CODPEDIDO
DESCRICAO
QTVENDA
VALPRODUTO
PEDIDOITENS.VALPEDIDO
Paulo Cavalcanti
Post mais votado
08/01/2016
Creio que houve um erro na modelagem do banco de dados, ou está faltando alguma tabela que faça o "meio de campo" entre essas duas.
Pelo que vejo o jeito certo dessa query seria na tabela pedidos ter o codpedido e o codpedido na tabela pedidoitens ser FK
query para o procedimento certo
SELECT
*
FROM
PEDIDOS AS PEDIDOS
LEF JOIN PEDIDOITENS AS ITENS ON PEDIDOS.CODPEDIDO = ITENS.CODPEDIDO
WHERE
PEDIDOS.DTPEDIDO BETWEEN '2015-01-01' AND '2015-01-01 23:59:59'
Claudio Lopes
Mais Posts
08/01/2016
Rafael Brandão
Não sei o que está usando para fazer a consulta, mas você pode montar uma query com join e na cláusula where você aplica os filtros.
Ex:
select i.* /* (aqui estou pegando todos os itens, pois imagino que você queira saber quais itens têm em cada pedido) */
from pedidos as P
inner join pedidoitens as i on p.codpedido = i.codpedido
where p.dtpedido >= @data_inicial /* parâmetros*/
and p.dtpedido < @data_final + 1
and [status] = @status
Aonde @data_inicial , @data_final e @status são os parâmetros.
Como o amigo Din falou, se a codpedido não for PK na pedidos e FK na pedidoitens, creio que o MER do seu banco de dados está incorreto e compromete a integridade das informações.
Espero ter ajudado.
08/01/2016
Paulo Cavalcanti
10/01/2016
Paulo Cavalcanti
Utilizei os seguintes componentes:
TDataSetProvider
TSQLQuery
TClientDataSet
TDataSource
Mais uma ajuda. No resultado da consulta aparece um campo do total do pedido. Caso queira somar o campo totalpedido aonde entraria a instrução SUM? Gostaria também que me indicassem uma apostila sobre SQL.
11/01/2016
Lucas Silva
então é só você fazer assim:
select NRPEDIDO,
CODPEDIDO,
DTPEDIDO,
STATUS,
CODPEDIDO,
DESCRICAO,
QTVENDA,
VALPRODUTO
from pedidos p
left join pedidositens pi on pi.nrpedido = p.codpedido
where STATUS='ATIVO' and DTPEDIDO between '12/01/2015' and '12/31/2015'
sendo que você tem que colocar no lugar de ATIVO o status que você quer e no lugar das datas que eu coloquei você deve colocar a data inicial e final (no formato americano: mês/dia/ano) onde você que buscar.
Sobre o campo TOTALPEDIDO: Esse campo está na tabela de itens? Se sim essa é uma prática ruim, pois o TOTALPEDIDO refere-se ao pedido portanto deve constar na tabela pedido, além disso todos itens desse pedido teriam o mesmo valor e isso é redundância. Tá em qual tabela esse campo?
Qualquer outra dúvida pode falar comigo, Cavalcanti.
11/01/2016
Paulo Cavalcanti
O campo total dos pedidos fica na tabela pedidos.
O que preciso é o total dos pedidos entre as faixas de data que tenham o status FECHADO.
11/01/2016
Lucas Silva
select sum(TOTALPEDIDO) from pedidos where DTPEDIDO between '12/01/2015' and '12/31/2015'
irá ser retornado a soma (sum) dos pedidos onde a data de pedido esteja entre (between) 01/12/2015 e 31/12/2015
11/01/2016
Lucas Silva
and status='FECHADO'
no final do SQL, então o SQL completo seria:
select sum(TOTALPEDIDO) from pedidos where DTPEDIDO between '12/01/2015' and '12/31/2015' and status='FECHADO'
15/01/2016
Paulo Cavalcanti
18/04/2017
Breno Viana
Bom, e se não existir a data solicitada no banco? como devo proceder ?
Clique aqui para fazer login e interagir na Comunidade :)