Fórum Junção de Várias Tabelas #377584

14/05/2010

0

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

Responder

Posts

14/05/2010

Eliézio Mesquita

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
Responder

Gostei + 0

14/05/2010

Emerson Nascimento

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

Responder

Gostei + 0

14/05/2010

Rafael Ribeiro

Emerson, valeu!

 Com sub-selects resolveu sim!

Grato,
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar