Я сократил сложную схему до следующих образцов
Студенты
- StudentID int, Имя varchar (50)
- 1, Билл
- 2, Эми
- 3, Бет
- 4, Скотт
- 5, Стив
Классы
- ClassID int, Имя varchar (50), Period varchar (50)
- 1, Algebra, Period1
- 2, География, Period3
- 3, Биология, Период 5
- 4, Физика, Период 4
- 5, Речь, Период 2
- 6, История, Период 6
и соединительная таблица
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
. Я могу сделать это, выбрав сводную таблицу во временной таблице, а затем перебирая курсор для каждой строки / столбца, но я бы хотел этого избежать.Любые предложения приветствуются.