| Author |
Topic |
|
sahu74
Posting Yak Master
100 Posts |
Posted - 2003-07-03 : 11:42:24
|
| I have three table with the same table structureTable1 has Dept, fund, account, code_A, code_B, Amount02Table2 has Dept, fund, account, code_A, code_B, Amount03Table3 has Dept, fund, account, code_A, code_B, Amount04I need to join them into one table (FINAL_TABLE)with :Dept, fund, account, code_A, code_B, Amount02, Amount03, Amount04where I need to match fund, account, code_A, code_B from all three tables and also display records which might not have corresponding records in other two tables. I was assuming a FULL JOIN would work but that doesnot seem to give me the complete results.Any help will appreciated.PKS |
|
|
Amethystium
Aged Yak Warrior
701 Posts |
Posted - 2003-07-03 : 12:13:20
|
CREATE TABLE TABLE1 (DEPT CHAR(2), FUND CHAR(2), CODEA CHAR(5), CODEB CHAR(5), AMOUNT02 MONEY)CREATE TABLE TABLE2 (DEPT CHAR(2), FUND CHAR(2), CODEA CHAR(5), CODEB CHAR(5), AMOUNT03 MONEY)CREATE TABLE TABLE3 (DEPT CHAR(2), FUND CHAR(2), CODEA CHAR(5), CODEB CHAR(5), AMOUNT04 MONEY)INSERT INTO TABLE1 (DEPT , FUND , CODEA , CODEB , AMOUNT02 )SELECT 'AA', 'XX', 'TRAN1', 'SSASS', 22.53UNION ALLSELECT 'BB', 'YY', 'TRAN9', 'SSASS', 152.32UNION ALLSELECT 'CC', 'ZZ', 'TRAN4', 'SSASS', 41.15INSERT INTO TABLE2 (DEPT , FUND , CODEA , CODEB , AMOUNT03 )SELECT 'AA', 'XX', 'TRAN1', 'SSASS', 1124.32UNION ALLSELECT 'FF', 'YY', 'TRAN9', 'SSASS', 1543.1UNION ALLSELECT 'CC', 'ZZ', 'TRAN4', 'SSASS',9.52INSERT INTO TABLE3 (DEPT , FUND , CODEA , CODEB , AMOUNT04 )SELECT 'AA', 'XX', 'TRAN1', 'SSASS', 112.68UNION ALLSELECT 'BB', 'YY', 'TRAN9', 'SSASS', 55874.52UNION ALLSELECT 'DD', 'ZZ', 'TRAN4', 'SSASS', 10.25CREATE TABLE FINAL_TABLE (DEPT CHAR(2), FUND CHAR(2), CODEA CHAR(5), CODEB CHAR(5), AMOUNT02 MONEY, AMOUNT03 MONEY, AMOUNT04 MONEY)INSERT INTO FINAL_TABLE (DEPT, FUND, CODEA, CODEB)SELECT DEPT, FUND, CODEA, CODEB FROM TABLE1UNION SELECT DEPT, FUND, CODEA, CODEB FROM TABLE2UNION SELECT DEPT, FUND, CODEA, CODEB FROM TABLE3UPDATE FINAL_TABLESET AMOUNT02 = A.AMOUNT02FROM TABLE1 AWHERE A.DEPT = FINAL_TABLE.DEPTAND A.FUND = FINAL_TABLE.FUNDAND A.CODEA = FINAL_TABLE.CODEAAND A.CODEB = FINAL_TABLE.CODEBUPDATE FINAL_TABLESET AMOUNT03 = A.AMOUNT03FROM TABLE2 AWHERE A.DEPT = FINAL_TABLE.DEPTAND A.FUND = FINAL_TABLE.FUNDAND A.CODEA = FINAL_TABLE.CODEAAND A.CODEB = FINAL_TABLE.CODEBUPDATE FINAL_TABLESET AMOUNT04 = A.AMOUNT04FROM TABLE3 AWHERE A.DEPT = FINAL_TABLE.DEPTAND A.FUND = FINAL_TABLE.FUNDAND A.CODEA = FINAL_TABLE.CODEAAND A.CODEB = FINAL_TABLE.CODEBSELECT * FROM FINAL_TABLE  |
 |
|
|
jsmith8858
Dr. Cross Join
7423 Posts |
Posted - 2003-07-03 : 12:25:31
|
| CREATE VIEW FinalTableASSELECT dept, fund, acount, code_A, code_b, sum(amount_02) as Amount02, sum(Amount03) as Amount03, sum(Amount04) as Amount04FROM( SELECT dept, fund, account, code_A, code_b, Amount02, 0 as Amount03, 0 as Amount04FROM Table1UNION ALLSELECT dept, fund, account, code_A, code_b, 0 as Amount02, Amount03, 0 as Amount04FROM Table2UNION ALLSELECT dept, fund, account, code_A, code_b, 0 as Amount02, 0 as Amount03, Amount04FROM Table3)GROUP BY dept, fund, account, code_A, code_bThat will ensure that you have all the data you need. Avoid FULL OUTER JOINs. I have yet to see an situation in which a FULL OUTER JOIN's provides better result/performance then a UNION/GROUP BY solution.Also: there is no reason to store this data in another table. Leave it as a VIEW. then you don't have to worry about updates -- the VIEW will always be up-to-date, and of course you can SELECT from it and use it just like a table. - Jeff |
 |
|
|
Amethystium
Aged Yak Warrior
701 Posts |
Posted - 2003-07-03 : 12:49:18
|
Nicely done.  |
 |
|
|
|
|
|