Я сократил сложную схему до следующих примеров
Студенты
Классы
и таблица соединений
StudentsClasses
Моя цель - перечислить каждого ученика с выбранными им классами, перечисленными в порядке точек. У меня есть следующий выбор
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
Я могу сделать это выбор поворота во временную таблицу, а затем итерацию по каждой строке / столбцу с помощью курсора, но я бы хотел этого избежать. Любые предложения приветствуются.