sql >> Database teknologi >  >> RDS >> Sqlserver

Transponering af rækker til kolonner i SQL Server 2005

Du skal udføre en PIVOT . Der er to måder at gøre dette på med PIVOT, enten en statisk pivot, hvor du koder kolonnerne, der skal transformeres, eller en dynamisk pivot, som bestemmer kolonnerne ved udførelse.

Statisk pivot:

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

Se SQL Fiddle with Demo

Dynamisk pivot:

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)

Se SQL Fiddle with Demo

Hvis du ikke ønsker at bruge PIVOT funktion, så kan du udføre en lignende type forespørgsel med CASE udsagn:

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

Se SQL Fiddle with Demo



  1. Konvertering af en datetime2-datatype til en datetime-datatype resulterer i en værdi uden for området

  2. SQL-serverydelse:Hvad er hurtigere, en lagret procedure eller en visning?

  3. Flutter forbinder til en database på serveren

  4. MySQL:Optegnelser indsat pr. time, for de sidste 24 timer