I currently have this query:
x
SELECT Club_Name, SUM(Data_km) AS km, Type_id
FROM Data
INNER JOIN Clubs ON Data.Data_Club = Clubs.Club_id
INNER JOIN Types ON Clubs.Club_Type = Types.Type_id
WHERE Club_isActive = 1
GROUP BY Club_Name, Type_id
which gives me this table:
club_name | km | type |
---|---|---|
A | 10 | 1 |
A | 15 | 2 |
B | 80 | 1 |
B | 34 | 2 |
C | 36 | 1 |
And I’m trying to achieve:
club_name | type 1 km | type 2 km |
---|---|---|
A | 10 | 15 |
B | 80 | 34 |
C | 36 |
not all clubs will have a type 2. How do I rewrite the query to achieve the reorganization?
Advertisement
Answer
You can use conditional aggregation:
SELECT Club_Name,
SUM(CASE WHEN Type_id = 1 THEN Data_km END) as km_1,
SUM(CASE WHEN Type_id = 2 THEN Data_km END) as km_2
FROM Data d JOIN
Clubs c
ON d.Data_Club = c.Club_id JOIN
Types t
ON c.Club_Type = t.Type_id
WHERE Club_isActive = 1
GROUP BY Club_Name;