Dans SqlServer, comment joindre une seule colonne à partir de plusieurs lignes dans une seule ligne avec plusieurs colonnes

Dans SqlServer 2008, j'ai une table comme ceci:

+--------+--------------------+--------------+ some_key | some_discriminator | some_column -------- | ------------------ | ------------- K1 | D1 | V1 K1 | D2 | V2 K2 | D1 | V3 K2 | D2 | V4 

et je voudrais lancer une requête qui produit ceci:

 +--------+------+-------- some_key |D1 | D2 ---------|--------------- K1 | V1 | V2 K2 | V3 | V4 

Une simple requête pivot peut répondre à vos besoins:

 SELECT some_key, MAX(CASE WHEN some_discriminator = 'D1' THEN some_column ELSE NULL END) AS D1, MAX(CASE WHEN some_discriminator = 'D2' THEN some_column ELSE NULL END) AS D2 FROM yourTable GROUP BY some_key 

Le regroupement fonctionne car MAX ignore les valeurs NULL et MAX d'un seul VARCHAR renvoie cette string.

Mais cela peut ne pas convenir si vous avez plusieurs colonnes, ou colonnes dynamics, que vous souhaitez voir apparaître dans le résultat pivoté.