[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