On Fri, Aug 16, 2019 at 7:24 AM rob stone <floripa...@gmail.com> wrote:

> Hello,
>
> On Fri, 2019-08-16 at 07:39 -0400, stan wrote:
> > What am I doing wrong here?
> >
>
>
> Your view assumes that all three "streams" contain all the proj_no's
> whereas your test data for expense_report_cost_sum_view has no proj_no
> = 764.
>
>
Hi.  I'm probably missing something, but it seems simpler to either join
with USING, or by COALESCEing the two ID fields in left part of the JOIN
clause (COALESCE(t1.proj_no,t2.proj_no)=t3.proj_no).

Cheers,
Ken

CREATE TEMP TABLE t1 (id int, t1_val TEXT);
INSERT INTO t1 VALUES (2,'T1_2');
INSERT INTO t1 VALUES (5,'T1_5');
INSERT INTO t1 VALUES (7,'T1_7');
INSERT INTO t1 VALUES (10,'T1_10');

CREATE TEMP TABLE t2 (id int, t2_val TEXT);
INSERT INTO t2 VALUES (3,'T2_3');
INSERT INTO t2 VALUES (5,'T2_5');
INSERT INTO t2 VALUES (6,'T2_6');
INSERT INTO t2 VALUES (10,'T2_10');

CREATE TEMP TABLE t3 (id int, t3_val TEXT);
INSERT INTO t3 VALUES (4,'T3_4');
INSERT INTO t3 VALUES (6,'T3_6');
INSERT INTO t3 VALUES (7,'T3_7');
INSERT INTO t3 VALUES (10,'T3_10');

SELECT id,t1_val,t2_val,t3_val
FROM
    t1
    FULL JOIN t2 USING (id)
    FULL JOIN t3 USING (id)
;

SELECT COALESCE(t1.id,t2.id,t3.id) AS id,t1_val,t2_val,t3_val
FROM
    t1
    FULL JOIN t2 ON (t1.id=t2.id)
    FULL JOIN t3 ON (COALESCE(t1.id,t2.id)=t3.id)
;

 id | t1_val | t2_val | t3_val
----+--------+--------+--------
  2 | T1_2   |        |
  3 |        | T2_3   |
  4 |        |        | T3_4
  5 | T1_5   | T2_5   |
  6 |        | T2_6   | T3_6
  7 | T1_7   |        | T3_7
 10 | T1_10  | T2_10  | T3_10
(7 rows)


Cheers,
Ken


-- 
AGENCY Software
A Free Software data system
By and for non-profits
*http://agency-software.org/ <http://agency-software.org/>*
*https://demo.agency-software.org/client
<https://demo.agency-software.org/client>*
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