[firebase-br] Ajuda com select
Fausto
fausto.s.a em uol.com.br
Seg Out 8 18:47:54 -03 2012
Boa noite pessoal..
Estou migrando um projeto em um cliente, onde a base de dados esta em
paradox e vou convertê-la para Firebird.
Tem um relatório sobre pedidos onde é informado:
*NUMERO PEDIDO, DATA EMISSÃO CLIENTE QTDE ABERTO VLR ABERTO QTDE BAIXADA
VLR BAIXADO QTDE TOTAL VALOR TOTAL**
*Até ai tudo bem, o meu problema esta em trazer essas quantidades e
valores, abertos e baixados, visto que é permitido a baixa parcial de itens.
No projeto atual o programador fez, utilizando duas TQueries, a soma de
todos os itens abertos e todos os itens baixados, agrupando-os pelo
número do pedido e fez um campo de lookup através do número do pedido
para trazer essas quantidades e valores.
Esta mais ou menos assim:
TQuery1 - QryPed com um select no cabeçalho dos pedidos, já com os filtros
TQuery1 - QryIteBai para somar as quantidades e valores dos itens
baixados, diretamente dos itens (agrupados pelo número do pedido)
TQuery1 - QryIteAbe para somar as quantidades e valores dos itens
abertos, diretamente da tabela de itens (agrupados pelo número do pedido)
Ele criou 4 campos de lookup na TQuery1 sendo:
VlrAberto
QdeAberto
VlrBaixado
QdeBaixado
Ambos ligados em seus respectivos TQuerys..
Estou em dúvida de como montar um select que já obtenha os valores dos
itens, sem ter que fazer lookup
E estou fazendo assim:
Select dos pedidos:
SELECT DISTINCT
PED.PEDCOD,PED.PEDCLI,PED.CLICOD,PED.REPCOD,PED.FABCOD,
PED.GRACOD,PED.PEDEMI,PED.PEDENT,PED.PEDPRV,PED.PEDPR1,
PED.PEDEFB,PED.PEDCFA,PED.PEDCLQ,PED.PEDCOM,PED.PEDCAN,
PED.TRACOD,PED.PEDUNI,PED.PEDVAL,PED.PEDDES,PED.PEDCIF,
PED.PEDRED,PED.CPGCOD,PED.PEDSIT,PED.PEDFAT,PED.PEDDOC,
PED.PEDDEV,PED.OBSERV,FAB.FABNOM AS FABRICANTE,FAB.FABFAN AS FANTASIAFAB,
FAB.FABMAIL,GRA.TAMANHO,CLI.CLINOM AS CLIENTE,CLI.CLIMAI,CLI.CIDCOD,
CLI.REDCOD,FAB.REGCOD,VEN.REPNOM AS REPRESENTANTE,REG.CIDNOM AS REGIAO,
RED.REDNOM AS REDE
FROM
PEDIDOS PED
INNER JOIN FABRICA FAB ON (PED.FABCOD = FAB.FABCOD)
INNER JOIN CLIENTES CLI ON (PED.CLICOD = CLI.CLICOD)
INNER JOIN VENDEDORES VEN ON CLI.REPCOD = VEN.REPCOD
INNER JOIN CIDADES REG ON FAB.CIDCOD = REG.CIDCOD
INNER JOIN REDES RED ON CLI.REDCOD = RED.REDCOD
INNER JOIN PEDITEM ITE ON (PED.PEDCOD = ITE.PEDCOD)
WHERE (PED.FABCOD = 323)
AND (PED.PEDSIT < 2)
Para os itens em aberto teria que ser assim:
SELECT
SUM(ITE.ITEEMB * ITE.ITEQDE) AS QDEABE,
SUM(((ITE.ITEEMB * ITE.ITEQDE) * ITE.MODPRE) * (1 - (PED.PEDDES /
100))) AS VLRABE,
ITE.PEDCOD
FROM
PEDITEM ITE
INNER JOIN PEDIDOS PED ON (ITE.PEDCOD = PED.PEDCOD)
INNER JOIN CLIENTES CLI ON (PED.CLICOD = CLI.CLICOD)
INNER JOIN FABRICA FAB ON (PED.FABCOD = FAB.FABCOD)
WHERE
ITE.ITEDFT IS NULL AND // Para os itens em aberto ITE.ITEDFT <> NULL
ITE.ITEDCN IS NULL AND
PED.FABCOD = 323
GROUP BY ITE.PEDCOD
Alguém poderia me dar uma idéia?
Grato
--
Fausto Alves
Skype:faustoalves
msn:faustoalves em com4.com.br
Franca-SP
Enviado pelo Mozilla Thunderbird
http://br.mozdev.org/thunderbird
Mais detalhes sobre a lista de discussão lista