Zeilen in Spalten in DB2 mit dynamischem SQL umwandeln
Das Ziel besteht darin, Daten in einer Tabelle zu schwenken und Zeilen in Spalten umzuwandeln, um sie zu erhalten eine gewünschte Ausgabe. Betrachten Sie die folgende Tabellenstruktur:
Quelltabelle
ItemID | Item | Value |
---|---|---|
1 | Meeting | Now |
1 | Advise | Yes |
1 | NoAdvise | No |
2 | Meeting | Never |
2 | Advise | No |
2 | NoAdvise | Null |
2 | Combine | Yes |
Gewünschte Ausgabe
ItemID | Meeting | Advise | NoAdvise |
---|---|---|---|
1 | Now | Yes | No |
2 | Never | No | Null |
SQL Abfrage mit korrelierten Unterabfragen
Ein Ansatz, diese Transformation zu erreichen, ist die Verwendung korrelierter Unterabfragen Unterabfragen:
SELECT A.ItemID, MAX(CASE WHEN A.Item = 'Meeting' THEN Value END) AS Meeting, MAX(CASE WHEN A.Item = 'Advise' THEN Value END) AS Advise, MAX(CASE WHEN A.Item = 'NoAdvise' THEN Value END) AS NoAdvise FROM A GROUP BY A.ItemID
Diese Abfrage führt mehrere korrelierte Unterabfragen aus, eine für jede gewünschte Ausgabespalte, um den entsprechenden Wert für jede Zeile zu extrahieren. Die Ergebnisse werden dann nach der ItemID-Spalte gruppiert, um die Pivot-Ausgabe zu erhalten.
Alternativer Ansatz mit dynamischem SQL
Eine weitere Option besteht darin, dynamisches SQL zu nutzen, um eine Pivot-Tabelle zu erstellen . Dieser Ansatz ermöglicht mehr Flexibilität und kann angepasst werden, um die gewünschten Ausgabespalten zu generieren:
DECLARE @cols AS NVARCHAR(MAX), @sql AS NVARCHAR(MAX) SET @cols = '' SELECT @cols += ',MAX(CASE WHEN Item = ''' + Item + ''' THEN Value END) AS ' + Item FROM ( SELECT DISTINCT Item FROM A ) AS Items SET @sql = 'SELECT ItemID, ' + SUBSTRING(@cols, 2) + ' FROM A GROUP BY ItemID' EXEC (@sql)
Diese Abfrage erstellt dynamisch die SQL-Anweisung basierend auf den unterschiedlichen Werten in der Artikelspalte und führt sie aus, wodurch die Pivot-Ausgabe generiert wird .
Das obige ist der detaillierte Inhalt vonWie kann ich in DB2 mithilfe von Dynamic SQL Zeilen in Spalten umwandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!