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

Làm cách nào để chuyển hàng thành cột trong sql server 2005

Có những câu hỏi tương tự tại đây , tại đây đã trả lời trong stackoverflow.

Bạn cần sử dụng toán tử PIVOT trong truy vấn của bạn để đạt được điều này. Dưới đây là ví dụ và giải thích về cách bạn có thể làm điều đó. Ví dụ được tham chiếu từ cái này nguồn.

---I assumed your tablename as TESTTABLE---
DECLARE @cols NVARCHAR(2000)
DECLARE @query NVARCHAR(4000)

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
                                '],[' + t.Name
                        FROM    TESTTABLE AS t
                        ORDER BY '],[' + t.Name
                        FOR XML PATH('')
                      ), 1, 2, '') + ']'

SET @query = N'SELECT '+ @cols +' FROM
(SELECT t1.Name , t1.Count FROM TESTTABLE AS t1) p
PIVOT (MAX([Count]) FOR Name IN ( '+ @cols +' ))
AS pvt;'

EXECUTE(@query)

Giải thích

1. Phần đầu tiên của truy vấn

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
                        '],[' + t.Name
                FROM TESTTABLE AS t
                ORDER BY '],[' + t.Name
                FOR XML PATH('')
              ), 1, 2, '') + ']'

cung cấp cho bạn một kết quả phẳng đẹp về các giá trị cột Tên của bạn trong một hàng duy nhất như sau

[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]  

Bạn có thể tìm hiểu thêm về STUFF và XML PATH tại đây tại đây .

2. SELECT + @cols + FROM sẽ chọn tất cả các hàng làm tên màu cho tập hợp kết quả cuối cùng (pvt - bước 3)

tức là

Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt] 

3. Truy vấn này kéo tất cả các hàng dữ liệu mà chúng ta cần để tạo kết quả trên nhiều tab. (P) sau truy vấn đang tạo một bảng tạm thời gồm các kết quả mà sau đó có thể được sử dụng để đáp ứng truy vấn cho bước 1.

(SELECT t1.Name, t1.Count FROM  TESTTABLE AS t1) p

4. Biểu thức PIVOT

PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt

có tóm tắt thực tế và đưa kết quả vào một bảng tạm thời được gọi là pvt dưới dạng

Chery | Drew | Morgon | Kath | Kirk | Matt  
-------------------------------------------  
257     1500     13      500    200    76


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phương pháp tốt nhất để loại bỏ phần thời gian của datetime trong SQL Server

  2. Công cụ miễn phí để so sánh hai Cơ sở dữ liệu SQL Server là gì?

  3. Chuyển đổi ‘datetimeoffset’ thành ‘time’ trong SQL Server (Ví dụ T-SQL)

  4. PI () Ví dụ trong SQL Server

  5. SQL Server sp_msforeachtable sử dụng để chỉ chọn những bảng đáp ứng một số điều kiện