Thread: FW: Table Join (Maybe?)
Thanks all for your suggestions – the below suggestion works perfectly.
A little tweak of the column counts and group by clauses makes it work like a charm.
Richard – this particular extract is via PHP to a web page so I can’t use those reporting tools, but I’ll have a look and fiddle for my next project – Thanks!
Cheers,
-p
-----Original Message-----
From: Arulmani V A [mailto:arulmani_s@yahoo.com]
Sent: Wednesday, 19 July 2006 20:49
To: Phillip Smith
Subject: Re: [SQL] Table Join (Maybe?)
Hi,
Postgres does not seem to support OLAP functions like ROLLUP, CUBE, etc. I'm not a Postgres expert, but I think we can try the following alternative approach :
Sample data for the two tables given by you are created as :
Table : stores
code name bms state business_open
1 Customer1 Y State1 Y
2 Customer2 Y State2 Y
3 Customer3 Y State1 Y
4 Customer4 Y State2 Y
Table : sales_figures
rep_date store sales_value sales_customers
2006-01-01 1 1000 0
2006-01-02 1 1000 0
2006-02-01 2 200 0
2006-02-02 2 200 0
2006-02-03 2 500 0
2006-01-03 1 100 0
2006-01-01 3 300 0
2006-01-02 3 200 0
2006-02-01 4 700 0
2006-02-02 4 400 0
If I execute the following query :
SELECT a.name, a.state, SUM(b.sales_value) FROM stores a, sales_figures b WHERE a.code = b.store GROUP BY a.state, a.name
UNION
SELECT NULL, a.state, SUM(b.sales_value) FROM stores a, sales_figures b WHERE a.code = b.store GROUP BY a.state
UNION
SELECT 'GRAND TOTAL', NULL, SUM(b.sales_value) FROM stores a, sales_figures b WHERE a.code =
b.store ORDER BY 2
I get the following output (same as what you expect?) :
name state sum
Customer1 State1 2100
Customer3 State1 500
NULL State1 2600
Customer2 State2 900
Customer4 State2 1100
NULL State2 2000
GRAND TOTAL NULL 4600
Is the above approach OK?
Regards
Arul
----- Original Message ----
From: Phillip Smith <phillips@weatherbeeta.com.au>
To: pgsql-sql@postgresql.org
Sent: Wednesday, July 19, 2006 1:04:58 PM
Subject: [SQL] Table Join (Maybe?)
Hi again all,
I have two tables:
1. Sales figures by date and customer.
2. Customer details – including their Geographic State
I need to extract a report from the first table (I can do that!), and in that report order by their State (I can do that too!), but I also need a summary of all the customers in each state, below the end of each state, and have a grand total at the bottom.
Eg:
Customer 1 State 1 $100.00
Customer 2 State 1 $100.00
State 1 $200.00
Customer 3 State 2 $100.00
Customer 4 State 2 $100.00
State 2 $200.00
Grand Total $400.00
Does anyone have any magic pointers for me? I’ve been playing with SELECT INTO as 2 queries (the individual customers, then the summary figures added to the temp table) but I end up with ROWS IN FIRST QUERY * ROWS IN SECOND QUERY instead of them all sorted together nicely L
Thanks all,
-p
Table Defs:
CREATE TABLE sales_figures
(
rep_date date NOT NULL,
store varchar(6) NOT NULL,
sales_value numeric DEFAULT 0,
sales_customers int4 DEFAULT 0,
CONSTRAINT sales_figures_pkey PRIMARY KEY (rep_date, store),
CONSTRAINT sales_figures_store FOREIGN KEY (store)
REFERENCES stores (code) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
CREATE TABLE stores
(
code varchar(2) NOT NULL DEFAULT ''::character varying,
name varchar(32) NOT NULL DEFAULT ''::character varying,
bms varchar(1) DEFAULT 'Y'::character varying,
state text DEFAULT 'UNKNOWN'::text,
business_open varchar(1) DEFAULT 'Y'::character varying,
CONSTRAINT stores_pkey PRIMARY KEY (code)
)
Phillip Smith
IT Coordinator
Weatherbeeta P/L
8 Moncrief Rd
Nunawading, VIC, 3131
AUSTRALIA
*******************Confidentiality and Privilege Notice*******************
The material contained in this message is privileged and confidential to the addressee. If you are not the addressee indicated in this message or responsible for delivery of the message to such person, you may not copy or deliver this message to anyone, and you should destroy it and kindly notify the sender by reply email.
Information in this message that does not relate to the official business of Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta. Weatherbeeta, its employees, contractors or associates shall not be liable for direct, indirect or consequential loss arising from transmission of this message or any attachments
*******************Confidentiality and Privilege Notice*******************
The material contained in this message is privileged and confidential to the addressee. If you are not the addressee indicated in this message or responsible for delivery of the message to such person, you may not copy or deliver this message to anyone, and you should destroy it and kindly notify the sender by reply email.
Information in this message that does not relate to the official business of Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta. Weatherbeeta, its employees, contractors or associates shall not be liable for direct, indirect or consequential loss arising from transmission of this message or any attachments