sql >> Databasteknik >  >> RDS >> Sqlserver

Överföra rader till kolumner i SQL Server 2005

Du måste utföra en PIVOT . Det finns två sätt att göra detta med PIVOT, antingen en statisk pivot där du kodar kolumnerna som ska transformeras eller en dynamisk pivot som bestämmer kolumnerna vid körning.

Statisk pivot:

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

Se SQL-fiol med 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-fiol med demo

Om du inte vill använda PIVOT funktion, då kan du utföra en liknande typ av fråga med CASE uttalanden:

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-fiol med demo



  1. java.sql.SQLException:Kolumnindex utanför intervallet, 0 <1

  2. Hur mappar man Postgres _INT8 till Java-enhet med Hibernate?

  3. Generera rader baserat på kolumnvärde

  4. SQL-uppdatering med row_number()