Fórum Junção de Várias Tabelas #377584
14/05/2010
0
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
Curtir tópico
+ 0Posts
14/05/2010
Eliézio Mesquita
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
14/05/2010
Emerson Nascimento
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
14/05/2010
Rafael Ribeiro
Com sub-selects resolveu sim!
Grato,
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)