I have a database table that looks like this:
Name | Town | Type | Brand | Ref |
---|---|---|---|---|
Smith | London | Big | Sony | 1020 |
Carlos | Rio | Big | Nokia | 050 |
Francois | Paris | Little | Sony | 250 |
I’d need to obtain :
Name | Town | Big_Sony | Big_Nokia | Little_Sony | Little_Nokia |
---|---|---|---|---|---|
Smith | London | 1020 | |||
Carlos | Rio | 050 | |||
Francois | Paris | 250 |
Is there any possibility, with IF condition, to fill the right column?
I don’t really know if I’d be possible to do it…
Thanks you for your precious help ๐
edit : I tried the Forpas suggestion, but I just add
Name | Town | Type | Brand | Ref |
---|---|---|---|---|
Roberto | Roma | Little | Sony | 100 |
but I have not more result ๐ see here
Answer
You need conditional aggregation:
SELECT Name, Town, MAX(CASE WHEN Type = 'Big' AND Brand = 'Sony' THEN Ref END) Big_Sony, MAX(CASE WHEN Type = 'Big' AND Brand = 'Nokia' THEN Ref END) Big_Nokia, MAX(CASE WHEN Type = 'Little' AND Brand = 'Sony' THEN Ref END) Little_Sony, MAX(CASE WHEN Type = 'Little' AND Brand = 'Nokia' THEN Ref END) Little_Nokia FROM tablename GROUP BY Name, Town
See the demo.
Results:
Name | Town | Big_Sony | Big_Nokia | Little_Sony | Little_Nokia |
---|---|---|---|---|---|
Carlos | Rio | null | 50 | null | null |
Francois | Paris | null | null | 250 | null |
Smith | London | 1020 | null | null | null |