Join the result of two Select's commands - PostgreSQL

2

My need is to join the result of two select's commands so that I get everything returned at once, for example in this command:

SELECT codigosuprimento, suprimento, count (codigosuprimento) quantidade, estoqueminimo, 
count (codigosuprimento) - estoqueminimo as saldo
    FROM public.estoque, public.suprimento where usado = '0' and codigosuprimento = 155 and
    public.estoque.codigosuprimento = public.suprimento.codigo group by codigosuprimento, suprimento, estoqueminimo order by suprimento;

I bring the current situation of the supply of code 155 into stock, My return is like this:

Andinthiscommand:

SELECTpublic.estoque.codigosuprimento,COUNT(public.estoque.codigosuprimento)asqtdSuprimentoFROMpublic.entrega,public.entregaitem,public.estoqueWHEREpublic.entrega.codigo=public.entregaitem.codigoentregaandcodigosuprimento=155andpublic.entregaitem.codigoestoque=public.estoque.codigoandpublic.entrega.data>=CURRENT_DATE-30GROUPBYpublic.estoque.codigosuprimentoORDERBYcodigosuprimento

Ibringyouhowmanysupplieshavebeenorderedinthelastthirtydays,andmyreturnislikethis:

My need would be to merge the results so that it had something similar to this:

codigosuprimento | suprimento | quantidade | estoqueminimo | saldo | qtdSolicitada
        155      |  50F0Z00   |     54     |        10     |   44  |       19  

I ran a test and put a query like this:

SELECT codigosuprimento, suprimento, count (codigosuprimento) quantidade, estoqueminimo, 
count (codigosuprimento) - estoqueminimo as saldo, 
(SELECT COUNT (public.estoque.codigosuprimento) as qtdSuprimento
FROM public.entrega, public.entregaitem, public.estoque
WHERE public.entrega.codigo = public.entregaitem.codigoentrega and codigosuprimento = 155 and
public.entregaitem.codigoestoque = public.estoque.codigo and public.entrega.data >= CURRENT_DATE - 30) as trinta
FROM public.estoque, public.suprimento where usado = '0' and codigosuprimento = 155 and
public.estoque.codigosuprimento = public.suprimento.codigo group by codigosuprimento, suprimento, estoqueminimo order by suprimento;

And so it brought me the expected result, but when I was testing to bring it without the condition of bringing only to the 155 code supply it already gave me nonsense results. I tried query and got the wrong results:

SELECT codigosuprimento, suprimento, count (codigosuprimento) quantidade, estoqueminimo, 
count (codigosuprimento) - estoqueminimo as saldo, 
(SELECT COUNT (public.estoque.codigosuprimento) as qtdSuprimento
FROM public.entrega, public.entregaitem, public.estoque
WHERE public.entrega.codigo = public.entregaitem.codigoentrega and
public.entregaitem.codigoestoque = public.estoque.codigo and public.entrega.data >= CURRENT_DATE - 30) as trinta
FROM public.estoque, public.suprimento where usado = '0' and
public.estoque.codigosuprimento = public.suprimento.codigo group by codigosuprimento, suprimento, estoqueminimo order by suprimento;
    
asked by anonymous 13.10.2017 / 19:36

1 answer

1
SELECT codigosuprimento
  , suprimento
  , count (codigosuprimento) quantidade
  , estoqueminimo
  , count (codigosuprimento) - estoqueminimo AS saldo
  , (
     SELECT COUNT (estoque2.codigosuprimento) as qtdSuprimento
     FROM public.entrega
        , public.entregaitem
        , public.estoque AS estoque2 --Renomeio a tabela para relacionar ambas as querys
     WHERE public.entrega.codigo = public.entregaitem.codigoentrega 
        AND public.estoque.codigosuprimento = estoque2.codigosuprimento-- Relaciono as 2 querys
        AND public.entregaitem.codigoestoque = estoque2.codigo 
        AND public.entrega.data >= CURRENT_DATE - 30
    ) AS trinta
FROM public.estoque
   , public.suprimento 
WHERE usado = '0' 
   AND codigosuprimento = 155 
   AND public.estoque.codigosuprimento = public.suprimento.codigo 
GROUP BY codigosuprimento
  , suprimento
  , estoqueminimo
ORDER BY suprimento;
    
13.10.2017 / 20:04