If the tables aren't huge, you're not concerned about optimization, and you
just want to get your numbers, I think something like this would do the
trick.  I haven't actually tried it 'cause I didn't have easy access to
your tables:

SELECT
  a.product_id,
  a.product_name,
  b.initial_stock_sum,
  c.in_out_sum,
  c.in_sum,
  c.out_sum
FROM
  a
LEFT JOIN
  (SELECT
    product_id,
    SUM(initial_stock) AS initial_stock_sum
  FROM b
  GROUP BY product_id
  ) b USING (product_id)
LEFT JOIN
  (SELECT
    product_id,
    sum(CASE WHEN date < 'BEGINNING DATE' THEN in-out ELSE 0 END) AS
in_out_sum,
    sum(CASE WHEN date BETWEEN 'BEGINNING DATE' AND 'ENDING DATE' THEN in
ELSE 0 END) AS in_sum,
    sum(CASE WHEN date BETWEEN 'BEGINNING DATE' AND 'ENDING DATE' THEN out
ELSE 0 END) AS out_sum
   FROM c
   GROUP BY product_id
   ) c USING (product_id)
WHERE a.supplier_id='XXX';

Cheers,
Ken


On Mon, Nov 18, 2013 at 12:47 AM, Raymond O'Donnell <r...@iol.ie> wrote:

> On 18/11/2013 02:16, Hengky Liwandouw wrote:
> > Dear Friends,
> >
> > Please help for the select command, as i had tried many times and
> > always can not display the result as what i want.
> >
> > I am looking for the solution on google but still can not found the
> > right answer to solve the problem.
> >
> > I have 3 tables :
> >
> > Table A ProductID ProductName SupplierID
> >
> > Table B ProductID InitialStock
> >
> > Table C ProductID Date In Out
> >
> > 1. I want to select all productID from Table A where
> > supplierID='XXX'.
> >
> > 2. Based on list from Step.1 : sum the initialstock from  Table B
> >
> > 3. Based on list from Step 1 : Sum (in-out) from Table C where date
> > <'BEGINNING DATE'
> >
> > 4. Based on list from Step 1 : Sum (in) and sum(out) from Table C
> > where date between 'BEGINNING DATE' and 'ENDING DATE'
> >
> > So the result will look like this :
> >
> > ProductID  ProductName  SumofIntialStock  sum(in-Out)<beginningdate
> > SumofIN  SumofOut xxxx           xxxxxxxxxxxxx              99
> > 99                                 99             99 xxxx
> > xxxxxxxxxxxxx              99                               99
> > 99             99 xxxx           xxxxxxxxxxxxx              99
> > 99                                 99             99 xxxx
> > xxxxxxxxxxxxx              99                               99
> > 99             99
>
> You could try using common table expressions, which let you build up to
> your final result in steps. Some reading:
>
> http://www.postgresql.org/docs/9.3/static/queries-with.html
>
>
> http://www.chesnok.com/daily/2013/11/12/how-i-write-queries-using-psql-ctes/
>
>
> Ray.
>
>
> --
> Raymond O'Donnell :: Galway :: Ireland
> r...@iol.ie
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>



-- 
AGENCY Software
A data system that puts you in control
100% Free Software
*http://agency-software.org/ <http://agency-software.org/>*
ken.tan...@agency-software.org
(253) 245-3801

Subscribe to the mailing
list<agency-general-requ...@lists.sourceforge.net?body=subscribe>
 to
learn more about AGENCY or
follow the discussion.

Reply via email to