Re: join problem - Mailing list pgsql-sql

From Michael Glaesemann
Subject Re: join problem
Date
Msg-id 50AD6CA6-3D28-457E-BCF9-568E0B4DD410@seespotcode.net
Whole thread Raw
In response to join problem  ("A. R. Van Hook" <hook@lake-lotawana.mo.us>)
List pgsql-sql
[Please don't top post as it makes the discussion more difficult to  
follow, and please reply to the list so that others may benefit from  
and participate in the discussion.]


On Jun 19, 2007, at 14:17 , A. R. Van Hook wrote:

> Michael Glaesemann wrote:
>>
>> On Jun 13, 2007, at 8:19 , A. R. Van Hook wrote:
>>
>>> I have join problem:
>>> "select i.ivid, v.eventdate, v.deposit, v.invdate, cai.db,
>>>                 sum(i.tax) as tax,
>>>                 sum(i.tax + i.rowtot) as totalP,
>>>                 (sum(i.tax + i.rowtot) - v.deposit) as balance
>>>               from invoice v
>>>               left outer join
>>>                      invoiceitems i
>>>                 on  v.ivid = i.ivid
>>>               where v.cusid = $cusid
>>>                     and   v.cusid = cai.cusid                 
>>> group by i.ivid,  v.eventdate, v.deposit, v.invdate, cai.db
>>> ERROR:  missing FROM-clause entry for table "cai"
>>>
>>> If I add cai to the from clause "from invoice v, cai,  I get
>>> ERROR:  missing FROM-clause entry for table "cai"
>>> ERROR:  invalid reference to FROM-clause entry for table "v"
>>
>> I think you may need to change the order of the JOIN clause. Does  
>> this work?
>>
>> SELECT i.ivid
>>        , v.eventdate
>>        , v.deposit
>>        , v.invdate
>>        , cai.db
>>        , sum(i.tax) as tax
>>        , sum(i.tax + i.rowtot) as totalP
>>        , (sum(i.tax + i.rowtot) - v.deposit) as balance
>> FROM cai
>> JOIN invoice v ON (cai.cusid = v.cusid)
>> LEFT JOIN invoiceitems i ON (v.ivid = i.ivid)
>> WHERE v.cusid = $cusid
>> GROUP BY i.ivid
>>       , v.eventdate
>>       , v.deposit
>>       , v.invdate
>>       , cai.db
>>
>> Note I've also moved the cai.cusid = v.cusid into the JOIN  
>> condition (which is what it is). Also, if cai doesn't have a ivid  
>> column and invoiceitems doesn't have a cusid column, you can use  
>> USING (cusid) and USING (ivid) rather than ON (cai.cusid =  
>> v.cusid) and ON (v.ivid = i.ivid), which has the nice property of  
>> outputing only one join column rather than one column for each  
>> table, (i.e., only one cusid column rather than one each for cai  
>> and invoice).
>>
>> Michael Glaesemann
>> grzm seespotcode net

> This solution works fine but the summations are reporting  
> individual row data.
> i.e.
> ivid | eventdate  | deposit |  invdate   |  db  |  tax   | totalp   
> | balance
> ------+------------+---------+------------+------+--------+--------- 
> +---------
> 7610 | 10/15/2005 |    0.00 | 05/05/2005 | 0.00 | 11.490 | 170.490  
> | 170.490
> 7868 | 10/15/2005 |   85.25 | 06/04/2005 | 0.00 |        |          
> |       8620 | 10/15/2005 |   85.24 | 09/07/2005 | 0.00 |  0.000  
> |   0.000 | -85.240
>
> can the query be modified to get the overall totals of each  
> (db,tax,totalp,balance)?

If you want totals for db, tax, totalp, and balance, you'll need to  
modify the rows that are returned (the SELECT list) and the GROUP BY  
clause to group those together. I don't know what you want to the  
totals over: eventdate? ivid? Give it a try and if you still have  
questions, be sure to post what you've attempted.

Michael Glaesemann
grzm seespotcode net




pgsql-sql by date:

Previous
From: Jeff Frost
Date:
Subject: Re: separating improperly grouped page views
Next
From: "Jaime Casanova"
Date:
Subject: Fwd: [pgsql-es-ayuda] Ejecutar \copy desde VB