Предложение Абэ выглядит следующим образом:
select * from Class
pivot (COUNT(ID) for CLASS in ([Course1],[Course2],[Course3])) as Taking
Что дает такие результаты:
Name Course1 Course2 Course3
BILL 0 1 1
BOB 1 1 0
JOHN 1 1 0
SAM 1 0 0
Конечно, это немного отличается от того, что вы хотите ... вы хотите курс 1иметь значение для «первого курса».Единственный способ сделать это - с помощью динамического SQL.
Если вы хотите разделить запятыми список курсов (в одном столбце), который намного проще и быстрее генерировать.list
select c.Name,
STUFF((SELECT ( ', ' + c2.Class )
FROM #Class c2
WHERE c.Name = c2.Name
ORDER BY c2.Class
FOR XML PATH( '' )),1,2,'') as [Class List]
FROM #Class c
GROUP BY c.Name
Дает вам:
Name Class List
BILL Course2, Course3
BOB Course1, Course2, Course3
JOHN Course1, Course2
SAM Course1