Просто ви липсва група от :)
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
Редактиране:
След като играх известно време, мисля, че получих първото решение, което търсите. Опитайте :)
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
За следната таблица:
+------------+----------+---------+
| 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 |
+------------+----------+---------+
Данните се превръщат в това:
+------------+------+------+-------+
| PARTNUMBER | SUP1 | SUP2 | SUP3 |
+------------+------+------+-------+
| a1 | | | Three |
| a2 | | Two | |
| a3 | | Two | Three |
| a4 | One | | |
| a5 | One | | Three |
| a6 | One | Two | |
| a7 | One | Two | Three |
+------------+------+------+-------+
И накрая в това:
+------------+-------+-------+-------+
| PARTNUMBER | SUPP1 | SUPP2 | SUPP3 |
+------------+-------+-------+-------+
| a1 | Three | | |
| a2 | Two | | |
| a3 | Two | Three | |
| a4 | One | | |
| a5 | One | Three | |
| a6 | One | Two | |
| a7 | One | Two | Three |
+------------+-------+-------+-------+