S'il vous plaît indiquer quelle technologie base de données que vous utilisez. Dans SQL Server, PIVOT est un bon choix. Dans ORACLE, la syntaxe CONNECT BY peut fonctionner.
Si vos types sont fixes et ne me dérange pas d'une requête laide qui fonctionnera à peu près partout, ce qui suit suffira:
SELECT
T.UID,
MIN((SELECT Limit FROM TheTable A WHERE A.UID = T.UID AND Type = 'A')) A,
MIN((SELECT Limit FROM TheTable B WHERE B.UID = T.UID AND Type = 'B')) B,
MIN((SELECT Limit FROM TheTable C WHERE C.UID = T.UID AND Type = 'C')) C
FROM TheTable T
GROUP BY T.UID
La fonction MIN est utilisé pour éviter les plaintes du serveur de base de données de ne pas inclure les colonnes A, B et C dans votre clause GROUP BY.
Sloppy et lent, mais cela fonctionne.
Une autre approche qui peut être plus rapide dans la plupart des systèmes de base de données (méfiez-vous des cartésiens ici si un type a plusieurs enregistrements par UID):
SELECT
Driver.UID,
A.Limit A,
B.Limit B,
C.Limit C
FROM TheTable Driver
INNER JOIN TheTable A ON Driver.UID = A.UID AND A.Type = 'A'
INNER JOIN TheTable B ON Driver.UID = B.UID AND B.Type = 'B'
INNER JOIN TheTable C ON Driver.UID = C.UID AND C.Type = 'C'
Quel RDBMS utilisez-vous? Cela fait toute la différence – Eric
J'utilise MySQL comme RDBMS. – coderama