Pivot-Transformation mit SQL Server 2000
Problem:
Ihre Datenbank enthält zwei Tabellen, Produkte und Produkt-Meta mit den folgenden Strukturen:
Products: - ProductId - Name Product Meta: - ProductId - MetaKey - MetaValue
Sie möchten diese Daten in umwandeln eine Ergebnismenge, die die MetaValue-Spalte basierend auf der MetaKey-Spalte dreht. Die gewünschte Ergebnismenge ist:
ProductId | Name | A | B | C
Lösung:
Obwohl die zuvor vorgeschlagenen Lösungen möglicherweise nicht optimal sind, heben sie dennoch die Verwendung von Aggregatfunktionen oder Unterabfragen hervor Stellen Sie eine gültige Gruppierung sicher. Hier ist ein alternativer Ansatz:
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;
Diese Abfrage verknüpft die Tabellen „Products“ und „Product Meta“ und gruppiert die Ergebnisse nach ProductId und Name. Die Aggregatfunktion MAX() wird verwendet, um den maximalen MetaValue für jeden MetaKey zu extrahieren. Dadurch wird sichergestellt, dass nur der neueste bzw. aktuellste MetaValue für jeden Schlüssel im Ergebnissatz enthalten ist.
Das obige ist der detaillierte Inhalt vonWie werden Produktmetadaten in SQL Server 2000 mithilfe einer JOIN- und Aggregate-Funktion geschwenkt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!