Holden
Holden

Reputation: 23

Join and Group Three Tables On Multiple Criteria - SQL

I am trying to join three separate tables based on certain criteria. Here are table examples:

TABLE A

+----+------------+----------+---------+
| id | entry num  | line num | inv line|
+----+------------+----------+---------+
|  1 |          1 |     1    | 1       |
|  2 |          1 |     1    | 2       |
|  3 |          2 |     1    | 1       |
|  4 |          2 |     2    | 1       |
|  5 |          3 |     1    | 1       |
|  6 |          3 |     1    | 2       |
|  7 |          3 |     1    | 3       |
+----+------------+--------+-----------+

TABLE B

+----+------------+----------+---------+
| id | entry num  | line num | code    |
+----+------------+----------+---------+
|  1 |          1 |     1    | 100     |
|  2 |          2 |     1    | 370     |
|  3 |          2 |     2    | 120     |
|  4 |          3 |     1    | 300     |
+----+------------+--------+-----------+

TABLE C

+----+------------+--------+-----------+
| id | rate       | amt    | code      |
+----+------------+--------+-----------+
|  1 |        25% |    $50   | 100     |
|  2 |        50% |    $20   | 370     |
|  3 |        50% |    $25   | 120     |
|  4 |        30% |    $150  | 300     |
+----+------------+----------+---------+

I need the final table to look like this, but I am at a loss on how to write the syntax:

FINAL TABLE

+----+------------+----------+---------+---------+---------+---------+
| id | entry num  | line num | inv line|   code  |    rate |    amt  |
+----+------------+----------+---------+---------+---------+---------+
|  1 |          1 |     1    | 1       | 100     |    25%  |    $50  |
|  2 |          1 |     1    | 2       | 100     |    25%  |    $50  |
|  3 |          2 |     1    | 1       | 370     |    50%  |    $20  |
|  4 |          2 |     2    | 1       | 120     |    50%  |    $25  |
|  5 |          3 |     1    | 1       | 300     |    30%  |    $150 |
|  6 |          3 |     1    | 2       | 300     |    30%  |    $150 |
|  7 |          3 |     1    | 3       | 300     |    30%  |    $150 |
+----+------------+----------+---------+---------+---------+---------+ 

Ultimately, I need table A and B joined where both entry num and line num match, but then I need to show each individual row for the inv line number.

For example, entry num 3 / line num 1 will has 3 invoice numbers. All entry num 3/ line num 1 will have the code 300, 30% rate, and $150 amount, but I need to visibly see that there are 3 invoice lines.

I've tried to join tables, group them, and get total counts, but to no avail. Thanks for your help!

Upvotes: 0

Views: 41

Answers (1)

Applecore
Applecore

Reputation: 4099

I think that you need to create joins between TableA and Table B on EntryNum and LineNum, and then between TableB and TableC on Code. Your SQL should look like:

SELECT A.ID, A.EntryNum, A.LineNum, A.InvLine, B.Code, C.Rate, C.Amt
FROM TableC AS C INNER JOIN (TableB AS B INNER JOIN TableA AS A ON (B.LineNum = A.LineNum) AND (B.EntryNum = A.EntryNum)) 
ON C.Code = B.Code;

Which produces the result that you want:

enter image description here

Regards,

Upvotes: 1

Related Questions