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 và 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