sql >> Database >  >> RDS >> Sqlserver

Rijen omzetten in kolommen in SQL Server 2005

U moet een PIVOT . Er zijn twee manieren om dit te doen met PIVOT, ofwel een Static Pivot waar je de kolommen codeert om te transformeren of een Dynamic Pivot die de kolommen bepaalt bij uitvoering.

Statisch draaipunt:

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

Zie SQL Fiddle met demo

Dynamisch draaipunt:

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)

Zie SQL Fiddle met demo

Als u de PIVOT . niet wilt gebruiken functie, dan kunt u een soortgelijk type zoekopdracht uitvoeren met CASE uitspraken:

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

Zie SQL Fiddle met demo



  1. Kan ik certificaatverificatie Oracle utl_http overslaan?

  2. Illegale mix van sorteringen voor bewerking voor vergelijking van datum/tijd

  3. dplyr left_join met kleiner dan, groter dan voorwaarde

  4. Groepeer berichten op datum in Wordpress