Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Xoay vòng không có hàm tổng hợp trong MSSQL 2008 R2

Bạn có thể sử dụng hàm PIVOT để nhận kết quả, bạn chỉ cần sử dụng row_number() giúp đỡ.

Truy vấn cơ bản cho điều này sẽ là:

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

Xem SQL Fiddle with Demo . Tôi sử dụng row_number() để áp dụng một giá trị riêng biệt cho từng hàng trong skillskill_id , sau đó bạn sẽ sử dụng giá trị số hàng này làm cột để PIVOT.

Mã đầy đủ với PIVOT được áp dụng sẽ là:

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;

Xem SQL Fiddle with Demo .

Trong trường hợp của bạn, có vẻ như bạn sẽ có một số lượng thông số chưa biết cho mỗi kỹ năng. Nếu điều đó là đúng, thì bạn sẽ muốn sử dụng SQL động để nhận được kết quả:

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

Xem SQL Fiddle với Demo




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server - Làm tròn các giá trị TIME đến phút tiếp theo

  2. Nhóm SQL Server AlwaysOn Av sẵn sàng:Cài đặt và Cấu hình. Phần 2

  3. Chọn các tên cột duy nhất từ ​​danh sách các bảng đã kết hợp

  4. OPENJSON “Cú pháp không chính xác gần từ khóa‘ with ’.” trong SQL Server (SOLVED)

  5. Trục động SQL cho các mục tiêu