2011-05-31 18 views
5

मैं निम्नलिखित नमूने के लिए एक जटिल स्कीमा को कम कर दियाजटिल धुरी

छात्रों

  • StudentID पूर्णांक, नाम varchar (50)
  • 1, बिल
  • 2, एमी
  • 3, बेथ
  • 4, स्कॉट टी
  • 5, स्टीव

क्लासेस

  • ClassID पूर्णांक, नाम varchar (50), अवधि varchar (50)
  • 1, बीजगणित, Period1
  • 2 , भूगोल, अवधि 3
  • 3, जीवविज्ञान, अवधि 5
  • 4, भौतिकी, Period4
  • 5, भाषण, Period2
  • 6, इतिहास, Period6

और एक जंक्शन तालिका

StudentsClasses

  • StudentID पूर्णांक , क्लासआईडी int
  • 1, 1
  • 1, 4
  • 1, 5
  • 2, 6
  • 3, 5
  • 3, 4
  • 3, 6
  • 4, 1
  • 4 , 4
  • 5, 5
  • 5, 6

मेरा लक्ष्य प्रत्येक छात्र को अवधि के क्रम में सूचीबद्ध उनके चयनित वर्गों के साथ सूचीबद्ध करना है। मैं निम्नलिखित का चयन

SELECT Name,Period1, Period2, Period3, 
    Period4, Period5, Period6 
    FROM (
SELECT _Students.Name AS [NAME],_Classes.Period AS PIVOT_CODE, _Classes.name as [Class] 
FROM _Classes 
    INNER JOIN _StudentsClasses ON _Classes.ClassID=_StudentsClasses.ClassID 
    INNER JOIN _Students ON _StudentsClasses.StudentID=_Students.StudentID 
) 
    AS data 
    PIVOT 
    ( min([Class]) FOR [PIVOT_CODE] IN 
     (Period1, Period2, Period3, 
    Period4, Period5, Period6) 
    ) AS pvt 

कौन सा

Name Period1 Period2 Period3 Period4 Period5 Period6 
------ --------- --------- --------- --------- --------- ---------- 
Amy NULL  NULL  NULL  NULL  NULL  History 
Beth NULL  Speech NULL  Physics NULL  History 
Bill Algebra Speech NULL  Physics NULL  NULL 
Scott Algebra NULL  NULL  Physics NULL  NULL 
Steve NULL  Speech NULL  NULL  NULL  History 

में परिणाम है मैं कहाँ की जरूरत है मदद की आवश्यकता है बाएँ स्तंभ की ओर सभी गैर nulls स्थानांतरित करने के लिए इसलिए कोई रिक्त स्थान हैं है।स्तंभ नाम उदाहरण

Name Choice1 Choice2 Choice3 Choice4 Choice5 Choice6 
------ --------- --------- --------- --------- --------- ---------- 
Amy History 
Beth Speech Physics History 
Bill Algebra Speech Physics 
Scott Algebra Physics 
Steve Speech History 

मैं धुरी एक कर्सर के साथ प्रत्येक पंक्ति/स्तंभ के ऊपर तो एक अस्थायी तालिका में का चयन बार-बार दोहराना लेकिन मैं उस से बचना चाहते हैं ऐसा कर सकते हैं के लिए नाम दिया जा सकता है। कोई भी सुझाव अति सराहनीय है।

+0

आप क्या डीबीएमएस उपयोग कर रहे हैं? –

उत्तर

5

SQL सर्वर 2005 (कम से कम) मानते हुए, विकल्प ऑर्डर करने के लिए ROW_NUMBER() का उपयोग कर:

SELECT Name, Choice1, Choice2, Choice3, Choice4, Choice5, Choice6 
FROM (
    SELECT 
     S.Name AS [NAME], 
     'Choice' + CAST(ROW_NUMBER() OVER(PARTITION BY S.Name ORDER BY S.Name, C.Period) AS VARCHAR) AS PIVOT_CODE, 
     C.Name as [Class] 
    FROM Classes C 
     JOIN StudentsClasses SC ON C.ClassID = SC.ClassID 
     JOIN Students S ON SC.StudentID = S.StudentID 
    ) 
    AS data 
    PIVOT 
    ( min([Class]) FOR [PIVOT_CODE] IN 
     (Choice1, Choice2, Choice3, Choice4, Choice5, Choice6) 
    ) AS pvt 
+0

अच्छा! मुझे इस निर्माण के बारे में पता नहीं था, धन्यवाद! – StuTheDog

+0

खुशी है कि मैं मदद कर सकता हूं। – rsbarro

संबंधित मुद्दे