我已經減少一個複雜的模式的下列樣品複雜樞軸
學生
- StudentID INT,名稱爲varchar(50)
- 1,比爾
- 2,艾美
- 3,Beth
- 4,Scot噸
- 5,史蒂夫
類
- 的ClassID INT,名稱爲varchar(50),週期VARCHAR(50)
- 1,代數,PERIOD1
- 2 ,地理,Period3
- 3,生物學,Period5
- 4,物理,Period4
- 5,語音PERIOD2
- 6,歷史,Period6
和結表
StudentsClasses
- StudentID INT ,ClassID 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
是將所有非空向左列,因此不存在空白。列名可以被重新命名,例如
Name Choice1 Choice2 Choice3 Choice4 Choice5 Choice6
------ --------- --------- --------- --------- --------- ----------
Amy History
Beth Speech Physics History
Bill Algebra Speech Physics
Scott Algebra Physics
Steve Speech History
我可以通過在每一行/列用光標選擇樞軸到一個臨時表,然後迭代,但我想避免這樣做。任何建議,非常感謝。
您正在使用什麼數據庫管理系統? – 2011-05-31 22:31:51