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_KDA
Job1_Match
Job2_KDA
Job2_Match
etc., 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
Vous devez vous connecter pour publier un commentaire.
Je voudrais faire à l'aide de sql dynamique, mais c'est (http://sqlfiddle.com/#!6/a63a6/1/0) le PIVOT de la solution:
Bonus: Cette façon de PIVOT pourrait être combiné avec le SQL dynamique (http://sqlfiddle.com/#!6/a63a6/7/0), encore une fois, je préfère faire plus simple, sans PIVOT, mais c'est tout bon exercice pour moi :
Combiner plusieurs des lignes et des colonnes dans une rangée et group by ID