sql >> Databasteknik >  >> RDS >> Sqlserver

Transponera i SQL Server 2012

Men om du vill ha DYNAMISK:Sql DEMO

Först behöver du en tidstabell för att skapa ett rad_id

SELECT row_number() over (partition by [Country] order by [StateCity]) [rn], 
       [StateCity],
       [Country]
INTO temp
FROM State;

Sedan kan du gå den dynamiska pivotvägen

Skapa de olika kolumnerna

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.[Country]) 
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

Skapa pivotfrågan:

set @query = 'SELECT rn, ' + @cols + ' from 
            (
                select [rn]
                     , [StateCity]
                     , [Country]
                from temp
           ) x
            pivot 
            (
                 max(StateCity)
                for [Country] in (' + @cols + ')
            ) p ';

Kör det

execute(@query);

OUTPUT:



  1. Är det möjligt att ställa in en timeout för en SQL-fråga på Microsoft SQL Server?

  2. SQL:Try/Catch upptäcker inte ett fel när man försöker komma åt en tabell som den inte kan hitta

  3. Hur kan jag utöka den här SQL-frågan för att hitta de k närmaste grannarna?

  4. PERIOD_ADD() Exempel – MySQL