Truy vấn bạn sẽ cần để nhận được kết quả trong câu hỏi của mình là:
create table StudentResults(StudentID int,Name nvarchar(50),Course nvarchar(50), CourseLevel nvarchar(10));
insert into StudentResults values(1,'John','English','E2'),(1,'John','Maths','E3'),(1,'John','Computing','L2');
select StudentID
,Name
,[Computing]
,[Maths]
,[English]
from StudentResults
pivot(max(CourseLevel) for Course in([Computing],[Maths],[English])
) as p;
Đầu ra:
StudentID Name Computing Maths English
1 John L2 E3 E2
Mặc dù bạn có thể tập luyện được, nhưng điều này đòi hỏi bạn phải mã hóa các chủ đề một cách khó khăn. Nếu danh sách các chủ đề của bạn có thể thay đổi, thì truy vấn này sẽ không còn phù hợp với mục đích nữa.
Nếu bạn cảm thấy thoải mái, bạn có thể khắc phục điều này bằng SQL động:
declare @cols as nvarchar(max)
,@query as nvarchar(max);
set @cols = stuff(
(select distinct ','+quotename(Course)
from StudentResults
for xml path(''),type).value('.','nvarchar(max)'
)
,1,1,''
);
set @query = 'select StudentID
,Name
,'[email protected]+'
from StudentResults
pivot (max(CourseLevel) for Course in ('[email protected]+')
) p';
execute (@query);
Mặc dù vậy, lý tưởng nhất là bạn chỉ cần trả về một tập hợp dữ liệu, vì nó dường như nằm trong bảng nguồn của bạn và để lớp báo cáo của bạn (ví dụ:SSRS) xử lý xoay vòng, mà nó phù hợp hơn nhiều so với SQL thuần túy.