I have 3 tables:
Table 1:
| Column A | Column B | Column D |
|---|---|---|
| A1 | B1 | 5.455626797 |
| A1 | B2 | 4.474291714 |
| A2 | B1 | 9.96811376 |
| A2 | B2 | 5.462867002 |
Table 2:
| Column A | Column C | Column D |
|---|---|---|
| A1 | C1 | 3.313957532 |
| A1 | C2 | 6.615960979 |
| A2 | C1 | 9.782949121 |
| A2 | C2 | 5.648031641 |
Table 3:
| Column B | Column C | Column D |
|---|---|---|
| B1 | C1 | 10.76037672 |
| B1 | C2 | 4.663363842 |
| B2 | C1 | 2.336529937 |
| B2 | C2 | 7.600628779 |
How can I use these 3 tables to deaggregate the data back into it's original form. RAW Data:
| Column A | Column B | Column C | Column D |
|---|---|---|---|
| A1 | B1 | C1 | 1.41704499 |
| A1 | B1 | C2 | 4.038581807 |
| A1 | B2 | C1 | 1.896912542 |
| A1 | B2 | C2 | 2.577379172 |
| A2 | B1 | C1 | 9.343331726 |
| A2 | B1 | C2 | 0.6247820347 |
| A2 | B2 | C1 | 0.4396173952 |
| A2 | B2 | C2 | 0.4396173952 |
I tried using some generic disaggregating queries, but column D was never accurately disaggregated.
Examples:
1)
SELECT t1.A, t1.B, t2.C,
CASE
WHEN t3.C IS NULL THEN t1.D - t2.D
WHEN t1.B = t2.C THEN 0
ELSE t1.D + t3.D - t2.D
END AS D
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.A = t2.A
LEFT JOIN Table3 t3 ON t1.B = t3.B AND t2.C = t3.C
ORDER BY A, B, C;
SELECT t1.A, t1.B, t2.C,
CASE
WHEN t3.C IS NULL THEN t1.D - t2.D
WHEN t1.B = t2.C THEN COALESCE(t3.D, 0)
ELSE t1.D + COALESCE(t3.D, 0) - t2.D
END AS D
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.A = t2.A
LEFT JOIN Table3 t3 ON (t1.B = t3.B AND t2.C = t3.C) OR (t1.B = t2.C)
ORDER BY A, B, C;