|
Posted by --CELKO-- on 05/03/07 18:44
Please post DDL, so that people do not have to guess what the keys,
constraints, Declarative Referential Integrity, data types, etc. in
your schema are. Sample data is also a good idea, along with clear
specifications. It is very hard to debug code when you do not let us
see it.
>> I'm new to SQL and am having trouble figuring this one out. <<
Your problem is that your schema is a mess. Get any book on RDBMS and
learn about Normalization. You have done some attribute splitting;
two tables with the same structure should be one table. You are
probably mimicking a file system.
CREATE TABLE Foobar
(posting_date DATE DEFAULT CURRENT_TIMESTAMP NOT NULL,
something_nbr INTEGER NOT NULL
CHECK (something_nbr BETWEEN 1 AND 18), --repeated group
something_amt INTEGER NOT NULL,
something_type CHAR(1) CHAR(1) NOT NULL
CHECK something_type IN ('A', 'B')), -- split attribute!
PRIMARY KEY (posting_date, something_nbr, something_type));
This will get you totals for the 1 to 18 categories or whatever they
are:
SELECT posting_date,
SUM(CASE WHEN something_nbr = 1
THEN something_amt ELSE 0 END) AS
tot_01,
..
SUM(CASE WHEN something_nbr = 18
THEN something_amt ELSE 0 END) AS
tot_18
FROM Foobar
GROUP BY posting_date;
you do not let us see it.
>> I'm new to SQL and am having trouble figuring this one out. <<
Your problem is that your schema is a mess. Get any book on RDBMS and
learn about Normalization. You have done some attribute splitting;
two tables with the same structure should be one table. You are
probably mimicking a file system.
CREATE TABLE Foobar
(posting_date DATE DEFAULT CURRENT_TIMESTAMP NOT NULL,
something_nbr INTEGER NOT NULL
CHECK (something_nbr BETWEEN 1 AND 18), --repeated group
something_amt INTEGER NOT NULL,
something_type CHAR(1) CHAR(1) NOT NULL
CHECK something_type IN ('A', 'B')), -- split attribute!
PRIMARY KEY (posting_date, something_nbr, something_type));
This will get you totals for the 'A' and 'B' types
SELECT posting_date,
SUM(CASE WHEN something_type = 'A;
THEN something_amt ELSE 0 END) AS
tot_A,
SUM(CASE WHEN something_type = 'B'
THEN something_amt ELSE 0 END) AS
tot_B
FROM Foobar
GROUP BY posting_date;
You can combine and them as you wish into another SELECT.
>
> I have 2 tables 'A_Totals' & 'B_Totals' each table is identical in
> construction, each column is labeled Date,Total1,Total2,Total3 up to
> Total 18.
>
> I have written some sctipts that populates these tables everyday.
>
> To get a total e.g of Total3 I have used the following SQL statement
>
> For A_Totals:
> SELECT sum(total3) FROM A_Totals
> This returns 18596
>
> For B_Totals
> SELECT sum(total3) FROM B_Totals
> This returns 21794
>
> I would like to create just 1 SQL statement to return both totals so
> I
> tried
> SELECT sum(A_Totals.total3),sum(B_Totals.total3) FROM
> A_Totals,B_Totals
> but this returns 1710832.00 ,1961532.00 and I can't figure out
> why :o(
>
> i also would like to create a statement that gives me a combined
> total
> e.g.
> SELECT sum(A_Totals.total3) + sum(B_Totals.total3) FROM
> A_Totals,B_Totals
> this is returning 3672364.00
>
> Thanks in advance
>
> Rich
Navigation:
[Reply to this message]
|