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

Pivot uden aggregatfunktion i MSSQL 2008 R2

Du kan bruge PIVOT-funktionen for at få resultatet, du skal blot bruge row_number() at hjælpe.

Grundforespørgslen for dette vil være:

select skill_id, skill, parameter,
  row_number() over(partition by skill, skill_id order by skill_id) rn
from yt;

Se SQL Fiddle with Demo . Jeg bruger row_number() at anvende en særskilt værdi på hver række i skill og skill_id , vil du derefter bruge denne rækkenummerværdi som kolonnen til at PIVOT.

Den fulde kode med PIVOT anvendt vil være:

select skill_id, skill,[Parameter_1], [Parameter_2], [Parameter_3]
from 
(
  select skill_id, skill, parameter,
    'Parameter_'+cast(row_number() over(partition by skill, skill_id 
                                     order by skill_id) as varchar(10)) rn
  from yt
) d
pivot
(
  max(parameter)
  for rn in ([Parameter_1], [Parameter_2], [Parameter_3])
) piv;

Se SQL Fiddle with Demo .

I dit tilfælde ser det ud til, at du vil have et ukendt antal parametre for hver færdighed. Hvis det er sandt, vil du bruge dynamisk SQL for at få resultatet:

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Parameter_'
                          +cast(row_number() over(partition by skill, skill_id 
                               order by skill_id) as varchar(10))) 
                    from yt
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT skill_id, skill,' + @cols + ' from 
             (
                select skill_id, skill, parameter,
                  ''Parameter_''+cast(row_number() over(partition by skill, skill_id 
                                   order by skill_id) as varchar(10)) rn
                from yt
            ) x
            pivot 
            (
                max(parameter)
                for rn in (' + @cols + ')
            ) p '

execute(@query);

Se SQL Fiddle with Demo




  1. oracle add_months-funktion adskiller sig fra Java

  2. Jeg ønsker at hente det samlede antal brugere af givne henvisnings-id'er i tabellen

  3. RANGE PRECEDING understøttes kun med UNBOUNDED

  4. Python &Sqlalchemy - Forbindelsesmønster -> Afbrudt tilfældigt fra fjernserveren