Junção de Várias Tabelas

Firebird

14/05/2010

Olá Pessoal!

      Tenho um problema em um "select" no firebird que não consigo resolver de jeito nenhum.
      Para melhor entendimento, vou criar um exemplo parecido:

      Tenho 4 tabelas:

               1) CODIGO - IDCODIGO, DESCRICAO;
               2) ITEMPROGRAMADO - IDITEMPROGRAMADO, IDCODIGO, QTDE;
               3) ITEMPRODUZIDO - IDITEMPRODUZIDO, IDCODIGO, QTDE;
               4) ITEMENVIADO - IDITEMENVIADO, IDCODIGO, QTE;

      Eu preciso realizar um select onde a resposta seja:

      CODIGO | PROGRAMADO | PRODUZIDO | ENVIADO

      Eu usei o seguinte código:

      SELECT c.CODIGO,

      CASE
      WHEN avg(IPG.quantidade) IS NULL THEN 0
      ELSE avg(IPG.quantidade)
      END AS PROGRAMADO,

      CASE
      WHEN sum(Ie.quantidade) IS NOT NULL THEN sum(Ie.quantidade)
      ELSE 0
      END AS ENVIADO,

      CASE
     WHEN SUM(IPR.quantidade) IS NOT NULL THEN SUM(IPR.quantidade)
     ELSE 0
     END AS PRODUZIDO

     FROM  codigo C

     full join itemprogramado IPG on IPG.idcodigo = C.idcodigo

     full join itemenviado Ie on Ie.idcodigo = C.idcodigo

     full join itemproduzido IPR on IPR.idcodigo = IH.idcodigo


     group by  c.codigo


    Contudo, o somatório dos valores dos ítem produzidos está dando um valor absurdo! As demais colunas estão corretas. Alguém tem alguma idéia de como fazer isso?


Grato,



Rafael Ribeiro

Rafael Ribeiro

Curtidas 0

Respostas

Eliézio Mesquita

Eliézio Mesquita

14/05/2010

Bom dia,

Caro Rafael, eu vejo campos que você deseja retornar

CODIGO | PROGRAMADO | PRODUZIDO | ENVIADO, este campos existem na sua tabela, porque no exemplo que você colocou eles não aparecem.
Precisamos saber os campos para poder montar a cosulta.


Eliézio Mesquita
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

14/05/2010

creio que dê pra resolver com sub-selects:

select
  c.CODIGO,
  (select coalesce(sum(IPG.quantidade),0)
   from itemprogramado IPG on IPG.idcodigo = C.idcodigo) PROGRAMADO,

  (select coalesce(sum(IE.quantidade),0)
   from itemenviado IE on IE.idcodigo = C.idcodigo) ENVIADO,

  (select coalesce(sum(IPR.quantidade),0)
   from itemproduzido IPR on IPR.idcodigo = C.idcodigo) PRODUZIDO
FROM
  codigo C

GOSTEI 0
Rafael Ribeiro

Rafael Ribeiro

14/05/2010

Emerson, valeu!

 Com sub-selects resolveu sim!

Grato,
GOSTEI 0
POSTAR