2 Stimmen

Konvertierung von langen Datensätzen in breite Datensätze in SQL mit einer beliebigen Anzahl von Gruppenvariablen

Angenommen, Sie haben wiederholte Messungen von Einzelpersonen im Zeitverlauf, die vertikal angezeigt werden, und Sie möchten diese in eine breite Anzeige umwandeln, z. B. von

family | year | salary
fam1   | 2002 | 80
fam1   | 2003 | 82
fam1   | 2008 | 90
fam2   | 1996 | 45
fam3   | 2002 | 70
fam3   | 2003 | 72

zu

family | salary1996 | salary2002 | salary2003 | salary2008
fam1   | 45         | .          | .          | .
fam2   | .          | 80         | 82         | 90
fam3   | .          | 70         | 72         | .

Das Problem ist, dass es eine beliebige Anzahl von möglichen Werten für "Jahr" gibt.

3voto

Adriano Carneiro Punkte 56027

Wenn Sie SQL Server verwenden, ist dies genau das Richtige für Sie:

Update

In der Annahme, dass Sie SQL Server 2005 oder höher verwenden, finden Sie hier den Code:

DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)

SELECT  @cols = STUFF(( SELECT distinct  '], [' + cast([year] as varchar)
                        FROM YourTable FOR XML PATH('') ), 1, 2, '') + ']'

SET @sqlquery = 'SELECT * FROM
      (SELECT family,  [year], [salary]
       FROM YourTable) base
       PIVOT (SUM(salary) FOR [year]
       IN (' + @cols + ')) AS finalpivot'

EXECUTE ( @sqlquery )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X