Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर 2008 में डायनेमिक कॉलम के साथ क्रॉसस्टैब क्वेरी

अपने प्रश्न में परिणाम प्राप्त करने के लिए आपको जिस प्रश्न की आवश्यकता होगी वह है:

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);

आदर्श रूप से, हालांकि, आप बस डेटा का एक सेट वापस कर देंगे, जैसा कि यह आपकी स्रोत तालिका में प्रतीत होता है और अपनी रिपोर्टिंग परत (उदाहरण के लिए एसएसआरएस) को पिवोटिंग को संभालने दें, जो कि शुद्ध एसक्यूएल की तुलना में काफी बेहतर है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2008 लंबे लेनदेन INSERT के चयन को अवरुद्ध क्यों कर रहा है?

  2. SQL सर्वर (T-SQL) में वर्तमान भाषा कैसे सेट करें

  3. एसक्यूएल सर्वर लापता तिथियां प्रदर्शित कर रहा है

  4. प्रत्येक आईडी के लिए नवीनतम रिकॉर्ड वापस करने के लिए SQL क्वेरी

  5. मूल रिकॉर्ड खोजने के लिए पुनरावर्ती क्वेरी