Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Pivot без агрегатна функция в MSSQL 2008 R2

Можете да използвате функцията PIVOT, за да получите резултата, просто ще трябва да използвате row_number() да помогна.

Основната заявка за това ще бъде:

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

Вижте SQL Fiddle с демонстрация . Използвам row_number() за да приложите отделна стойност към всеки ред в skill и skill_id , след това ще използвате тази стойност на номера на реда като колона за PIVOT.

Пълният код с приложената PIVOT ще бъде:

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;

Вижте SQL Fiddle с демонстрация .

Във вашия случай изглежда, че ще имате неизвестен брой параметри за всяко умение. Ако това е вярно, тогава ще искате да използвате динамичен SQL, за да получите резултата:

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);

Вижте SQL Fiddle с демонстрация




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да генерирате DDL скриптове (Създаване) от SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 17

  2. SQL Server bcp Utility и числовият тип данни

  3. SQL Server 2000:Идеи за извършване на подзаявка за агрегиране на конкатенация

  4. От .NET мога ли да получа пълния SQL низ, генериран от SqlCommand обект (с SQL параметри)?

  5. Предоставяне Изберете на изглед, а не на основна таблица, когато основната таблица е в друга база данни