Je mist gewoon een groep van :)
SELECT PartNumber,
MAX(IF (Priority = 0, SupName, NULL)) AS Sup1,
MAX(IF (Priority = 1, SupName, NULL)) AS Sup2,
MAX(IF (Priority = 2, SupName, NULL)) AS Sup3
FROM SupXref
GROUP BY PartNumber
Bewerken:
Na een tijdje spelen denk ik dat ik de eerste oplossing heb die je zoekt. Probeer het eens :)
SELECT partnumber,
COALESCE(Sup1, COALESCE(Sup2, Sup3)) AS Supp1,
IF (Sup1 IS NULL, IF (Sup2 IS NULL, NULL, Sup3), COALESCE(Sup2, Sup3)) AS Supp2,
IF (Sup1 IS NULL, NULL, IF (Sup2 IS NULL, NULL, Sup3)) AS Supp3
FROM (
SELECT PartNumber,
MAX(IF (Priority = 0, SupName, NULL)) AS Sup1,
MAX(IF (Priority = 1, SupName, NULL)) AS Sup2,
MAX(IF (Priority = 2, SupName, NULL)) AS Sup3
FROM SupXref
GROUP BY PartNumber
) AS S
Voor de volgende tabel:
+------------+----------+---------+
| PARTNUMBER | PRIORITY | SUPNAME |
+------------+----------+---------+
| a1 | 2 | Three |
| a2 | 1 | Two |
| a3 | 2 | Three |
| a3 | 1 | Two |
| a4 | 0 | One |
| a5 | 0 | One |
| a5 | 2 | Three |
| a6 | 0 | One |
| a6 | 1 | Two |
| a7 | 0 | One |
| a7 | 1 | Two |
| a7 | 2 | Three |
+------------+----------+---------+
Gegevens worden dit:
+------------+------+------+-------+
| PARTNUMBER | SUP1 | SUP2 | SUP3 |
+------------+------+------+-------+
| a1 | | | Three |
| a2 | | Two | |
| a3 | | Two | Three |
| a4 | One | | |
| a5 | One | | Three |
| a6 | One | Two | |
| a7 | One | Two | Three |
+------------+------+------+-------+
En tot slot in dit:
+------------+-------+-------+-------+
| PARTNUMBER | SUPP1 | SUPP2 | SUPP3 |
+------------+-------+-------+-------+
| a1 | Three | | |
| a2 | Two | | |
| a3 | Two | Three | |
| a4 | One | | |
| a5 | One | Three | |
| a6 | One | Two | |
| a7 | One | Two | Three |
+------------+-------+-------+-------+