'SQL merge row values in a column
TABLE 1
| CODE | VALUE |
|---|---|
| AA | 21 |
| AA | 32 |
| AB | 24 |
| AC | 22 |
| AA | 42 |
| AC | 20 |
| AD | 27 |
| AD | 28 |
| AE | 29 |
| AF | 31 |
| AG | 45 |
| AE | 51 |
| AH | 33 |
TABLE 2
| CODE | KEY |
|---|---|
| AA | 1 |
| AB | 2 |
| AC | 3 |
| AD | 4 |
| AE | 5 |
| AF | 6 |
| AG | 7 |
| AH | 8 |
Here i want to transform the table in such a way that AB value is summed to AA without effecting its key similarly AG's value has to be summed with AD without changing its key as below. Table 1 can have multiple values for a single code. pls help or tell me the approach.
| CODE | VALUE | KEY |
|---|---|---|
| AA | 119 | 1 |
| AC | 22 | 3 |
| AD | 100 | 4 |
| AE | 29 | 5 |
| AF | 31 | 6 |
| AH | 33 | 8 |
Solution 1:[1]
Use a CASE expression in TABLE1 to merge the codes that you want and aggregate and join to TABLE2:
SELECT t1.code, t1.value, t2.key
FROM (
SELECT CASE code
WHEN 'AB' THEN 'AA'
WHEN 'AG' THEN 'AD'
ELSE code
END code,
SUM(value) "value"
FROM table1
GROUP BY 1
) t1 INNER JOIN table2 t2
ON t2.code = t1.code
ORDER BY t1.code;
See the demo.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
