Combiner plusieurs lignes dans plusieurs colonnes de manière dynamique dans SQL Server

J'ai une grande table de base de données sur laquelle j'ai besoin d'effectuer l'action ci-dessous de manière dynamique à l'aide de Microsoft SQL Server.

À partir d'un résultat de ce genre:

 badge   |   name   |   Job   |   KDA   |   Match 
 - - - - - - - - - - - - - - - -
 T996    |  Darrien |   AP    |   3.0   |   20
 T996    |  Darrien |   ADC   |   2.8   |   16
 T996    |  Darrien |   TOP   |   5.0   |   120

À un résultat de ce genre à l'aide de SQL:

badge   |   name   |  AP_KDA | AP_Match | ADC_KDA | ADC_Match | TOP_KDA | TOP_Match 
- - - - - - - - -
T996    |  Darrien |   3.0   |   20     |  2.8    |   16      |   5.0   |  120      

Même si il y a 30 lignes, il sera également combiner en une seule ligne avec 60 colonnes.

Je suis actuellement en mesure de le faire par le codage en dur (voir l'exemple ci-dessous), mais pas de façon dynamique.

Select badge,name,
(
 SELECT max(KDA)
 FROM table
 WHERE (h.badge = badge) AND (h.name = name) 
 AND (Job = 'AP')
) AP_KDA,
(
 SELECT max(Match)
 FROM table
 WHERE (h.badge = badge) AND (h.name = name) 
 AND (Job = 'AP')
) AP_Match,
(
 SELECT max(KDA)
 FROM table
 WHERE (h.badge = badge) AND (h.name = name) 
 AND (Job = 'ADC')
) ADC_KDA,
(
 SELECT max(Match)
 FROM table
 WHERE (h.badge = badge) AND (h.name = name) 
 AND (Job = 'ADC')
) ADC_Match,
(
 SELECT max(KDA)
 FROM table
 WHERE (h.badge = badge) AND (h.name = name) 
 AND (Job = 'TOP')
) TOP_KDA,
(
 SELECT max(Match)
 FROM table
 WHERE (h.badge = badge) AND (h.name = name) 
 AND (Job = 'TOP')
) TOP_Match
from table h

J'ai besoin d'un MSSQL déclaration qui me permet de combiner plusieurs lignes en une seule ligne. La colonne 3 (Job) contenu combiner avec la colonne 4 et 5 en-têtes (KDA et Match) et de devenir une nouvelle colonne.

Donc, si il y a 6 valeurs distinctes pour Job (dire Job1 par Job6), alors le résultat sera de 12 colonnes, par exemple: Job1_KDAJob1_MatchJob2_KDAJob2_Matchetc., regroupés par badge et le nom.

J'ai besoin d'une instruction qui peut faire une boucle à travers la colonne 3 de données, donc je n'ai pas besoin de coder en dur (répétition de la requête pour chaque Job valeur) ou l'utilisation d'une table temporaire.

source d'informationauteur chabu | 2014-02-11