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

Chuyển kết quả của một cột thành một hàng

Bạn đang cố gắng PIVOT dữ liệu. Máy chủ SQL có PIVOT chức năng có thể thực hiện điều này cho bạn. Để thực hiện PIVOT bạn cần quyết định sử dụng hàm tổng hợp nào. Trong mẫu của tôi, tôi đã sử dụng MAX() nhưng bạn có thể sử dụng SUM() , v.v.

Nếu bạn không có hàm pivot thì bạn có thể sử dụng hàm tổng hợp với CASE tuyên bố để thực hiện điều này.

Phiên bản tổng hợp / CASE: Phiên bản này yêu cầu bạn viết mã cố định tất cả các tên vào các cột.

select 
  max(case when name = 'Engineering' then rating end) Engineering,
  max(case when name = 'Financials' then rating end) Financials,
  max(case when name = 'Scope' then rating end) Scope,
  max(case when name = 'Schedule' then rating end) Schedule,
  max(case when name = 'Risks' then rating end) Risks,
  max(case when name = 'People' then rating end) People
from yourtable

Xem SQL Fiddle with Demo

Phiên bản PIVOT tĩnh: Bạn sẽ cố gắng mã hóa các giá trị của tên vào truy vấn này

select *
from
(
  select name, rating
  from yourtable
) src
pivot
(
  max(rating)
  for name in ([Engineering], [Financials], [Scope],
               [Schedule], [Risks], [People])
) piv

Xem SQL Fiddle with Demo

Các phiên bản trên hoạt động tốt nếu bạn có một số lượng cột đã biết, nhưng nếu name của bạn giá trị không xác định, thì bạn có thể sử dụng sql động để PIVOT dữ liệu.

Phiên bản PIVOT động:

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Name) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ' + @cols + ' from 
             (
                select name, rating
                from yourtable
            ) x
            pivot 
            (
                max(rating)
                for name in (' + @cols + ')
            ) p '

execute(@query)

Xem SQL Fiddle with Demo

Cả ba phiên bản sẽ tạo ra cùng một kết quả:

| ENGINEERING | FINANCIALS | SCOPE | SCHEDULE | RISKS | PEOPLE |
----------------------------------------------------------------
|           1 |          3 |     1 |        2 |     3 |      3 |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểu dữ liệu thích hợp nhất để lưu trữ địa chỉ IP trong máy chủ SQL là gì?

  2. Kết nối với SQL Server bằng xác thực cửa sổ

  3. 2 cách trả về danh sách kích hoạt trong cơ sở dữ liệu máy chủ SQL bằng T-SQL

  4. SQL Server có tối ưu hóa tính toán DATEADD trong truy vấn chọn không?

  5. Hiểu chức năng bảo mật máy chủ SQL HAS_Permis_BY_Name và các trường hợp sử dụng của nó