A 3 table join question

Поиск
Список
Период
Сортировка
От stan
Тема A 3 table join question
Дата
Msg-id 20190816113939.GA29708@panix.com
обсуждение исходный текст
Ответы Re: A 3 table join question  ("David G. Johnston" <david.g.johnston@gmail.com>)
Re: A 3 table join question  (rob stone <floriparob@gmail.com>)
Список pgsql-general
First let me say a huge THANK YOU to all the helpful people that hanging out
on this.

I am changing from one type of work, going back to some database work for a
project, as my old job was eliminated. I have made great progress on this,
thanks to the time and effort of lots of folks from this list.

Now, here is my latest stumbling block. I have three "data streams" that all
contribute to the total costs of a project:

* labor cost
* material cost
* expense report cost

I have a view that summarizes the burdened cost from each of these 3
streams, and i am trying to create a view that shows the total project cost.

Here is the test data from each of the 3 streams:

stan=> select * from labor_cost_sum_view ;
 proj_no | labor_bill_sum | labor_cost_sum 
 ---------+----------------+----------------
   45 |     10810.0000 |  3133.17500000
  764 |      8712.0000 |   810.75000000
  789 |     46335.5400 |  7015.57500000
 (3 rows)

stan=> select * from material_cost_sum_view ;
 proj_no | mtrl_cost 
 ---------+-----------
   45 | 5394.6800
  764 | 7249.4800
 7456 | 4007.3000
(3 rows)

stan=> select * from expense_report_cost_sum_view ;
 proj_no | incured_sum | burdened_cost 
 ---------+-------------+---------------
   45 |     2564.98 |   2564.980000
 7456 |     1747.11 |   1747.110000
(2 rows)

And here is the clause for creating the summary table that I presently have:


DROP VIEW overall_cost_sum_view ;

CREATE view overall_cost_sum_view as 
select 
    material_cost_sum_view.proj_no as l_proj_vo ,
    labor_cost_sum_view.proj_no as m_proj_vo , 
    expense_report_cost_sum_view.proj_no as x_proj_vo , 
    cast (labor_cost_sum_view.labor_cost_sum as money) as l_burdened_cost,
    cast (material_cost_sum_view.mtrl_cost as money)as m_burdened_cost,
    cast (expense_report_cost_sum_view.burdened_cost as money)as x_burdened_cost ,
    cast (
            coalesce( labor_cost_sum_view.labor_cost_sum, 0) 
            +
                   coalesce(material_cost_sum_view.mtrl_cost, 0)
            +
                   coalesce(expense_report_cost_sum_view.burdened_cost, 0)
           as money)  as ttl_cost
from 
    labor_cost_sum_view 
full join    material_cost_sum_view  on
    material_cost_sum_view.proj_no = labor_cost_sum_view.proj_no
full join    expense_report_cost_sum_view  on
    expense_report_cost_sum_view.proj_no = labor_cost_sum_view.proj_no
;

Which results in the following:

stan=> select * from overall_cost_sum_view ;
-----------+-----------+-----------+-----------------+-----------------+-------- ---------+------------
        45 |        45 |        45 |       $3,133.18 |       $5,394.68 |       $ 2,564.98 | $11,092.84
       764 |       764 |           |         $810.75 |       $7,249.48 |                  |  $8,060.23
           |       789 |           |       $7,015.58 |                 |                  |  $7,015.58
      7456 |           |           |                 |       $4,007.30 |                  |  $4,007.30
           |           |      7456 |                 |                 |       $ 1,747.11 |  $1,747.11
(5 rows)


As you can see this statement seems to work correctly on the join of the
labor and material costs, but fails when I add the expense report stream.

What am I doing wrong here?

-- 
"They that would give up essential liberty for temporary safety deserve
neither liberty nor safety."
                        -- Benjamin Franklin



В списке pgsql-general по дате отправления:

Предыдущее
От: Peter Grman
Дата:
Сообщение: Bad Estimate for complex query with JOINS on subselects and OR in where conditions
Следующее
От: Simon Windsor
Дата:
Сообщение: Re: Error XX000 After pg11 upgrade