Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Transponieren von Zeilen in Spalten in SQL Server 2005

Sie müssen einen PIVOT . Es gibt zwei Möglichkeiten, dies mit PIVOT zu tun, entweder einen statischen Pivot, bei dem Sie die zu transformierenden Spalten codieren, oder einen dynamischen Pivot, der die Spalten bei der Ausführung bestimmt.

Statischer Drehpunkt:

SELECT *
FROM
(
    SELECT col1, col2
    FROM yourTable
) x
PIVOT
(
   min(col2)
   for col1 in ([A], [B], [C])
)p

Siehe SQL Fiddle mit Demo

Dynamischer Drehpunkt:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(col1) 
                    from t1
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ' + @cols + ' from 
             (
                select col1, col2
                from t1
            ) x
            pivot 
            (
                min(col2)
                for col1 in (' + @cols + ')
            ) p '

execute(@query)

Siehe SQL Fiddle mit Demo

Wenn Sie den PIVOT nicht verwenden möchten Funktion, dann können Sie eine ähnliche Art von Abfrage mit CASE durchführen Anweisungen:

select 
  SUM(CASE WHEN col1 = 'A' THEN col2 END) as A,
  SUM(CASE WHEN col1 = 'B' THEN col2 END) as B,
  SUM(CASE WHEN col1 = 'C' THEN col2 END) as C
FROM t1

Siehe SQL-Fiddle mit Demo