अपने प्रश्न में परिणाम प्राप्त करने के लिए आपको जिस प्रश्न की आवश्यकता होगी वह है:
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;
आउटपुट:
StudentID Name Computing Maths English
1 John L2 E3 E2
यद्यपि जैसा कि आप वर्कआउट करने में सक्षम हो सकते हैं, इसके लिए विषयों की हार्ड कोडिंग की आवश्यकता होती है। यदि आपके विषयों की सूची बदलने की संभावना है, तो यह प्रश्न अब उद्देश्य के लिए उपयुक्त नहीं होगा।
यदि आप सहज हैं, तो आप इसे गतिशील SQL के साथ ठीक कर सकते हैं:
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);
आदर्श रूप से, हालांकि, आप बस डेटा का एक सेट वापस कर देंगे, जैसा कि यह आपकी स्रोत तालिका में प्रतीत होता है और अपनी रिपोर्टिंग परत (उदाहरण के लिए एसएसआरएस) को पिवोटिंग को संभालने दें, जो कि शुद्ध एसक्यूएल की तुलना में काफी बेहतर है।