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é.