Transformation Pivot à l'aide de SQL Server 2000
Problème :
Votre base de données contient deux tables, Produits et Product Meta, avec les structures suivantes :
Products: - ProductId - Name Product Meta: - ProductId - MetaKey - MetaValue
Vous souhaitez transformer ces données dans un ensemble de résultats qui fait pivoter la colonne MetaValue, en fonction de la colonne MetaKey. L'ensemble de résultats souhaité est :
ProductId | Name | A | B | C
Solution :
Bien que les solutions suggérées précédemment ne soient pas optimales, elles mettent néanmoins en avant l'utilisation de fonctions d'agrégation ou de sous-requêtes pour assurer un regroupement valide. Voici une approche alternative :
SELECT P.ProductId, P.Name, MAX(CASE WHEN PM.MetaKey = 'A' THEN PM.MetaValue END) AS A, MAX(CASE WHEN PM.MetaKey = 'B' THEN PM.MetaValue END) AS B, MAX(CASE WHEN PM.MetaKey = 'C' THEN PM.MetaValue END) AS C FROM Products AS P LEFT JOIN ProductMeta AS PM ON PM.ProductId = P.ProductId GROUP BY P.ProductId, P.Name;
Cette requête rejoint les tables Products et Product Meta, regroupant les résultats par ProductId et Name. La fonction d'agrégation MAX() est utilisée pour extraire la MetaValue maximale pour chaque MetaKey. Cela garantit que seule la MetaValue la plus récente ou la plus récente pour chaque clé est incluse dans l'ensemble de résultats.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!