Отмена с именем столбца
у меня есть таблица StudentMarks с колоннами Name, Maths, Science, English.
Данные как 
Name,  Maths, Science, English  
Tilak, 90,    40,      60  
Raj,   30,    20,      10
Я хочу, чтобы это было организовано следующим образом:
Name,  Subject,  Marks
Tilak, Maths,    90
Tilak, Science,  40
Tilak, English,  60
С преобразование я могу получить имя, метки правильно, но не в состоянии получить имя столбца в исходной таблице Subject столбец в требуемом результирующем наборе.
как я могу добиться этого?
Я до сих пор достиг следующего запроса (чтобы получить имя, метки)
select Name, Marks from studentmarks
Unpivot
(
  Marks for details in (Maths, Science, English)
) as UnPvt
2 ответа:
ваш запрос очень близок. Вы должны быть в состоянии использовать следующее, которое включает в себя
subjectв последнем списке выбора:select u.name, u.subject, u.marks from student s unpivot ( marks for subject in (Maths, Science, English) ) u;посмотреть SQL Скрипка с демо
вы также можете попробовать стандартный метод SQL un-pivoting, используя последовательность логики со следующим кодом.. Следующий код имеет 3 шага:
- создайте несколько копий для каждой строки с помощью cross join (в этом случае также создается столбец subject)
- создайте столбец "метки" и заполните соответствующие значения с помощью выражения case ( например: если предметом является наука, выберите значение из столбца науки)
удалить пустые комбинации ( если существует таблица выражение можно полностью избежать, если в базовой таблице строго нет нулевых значений)
select * from ( select name, subject, case subject when 'Maths' then maths when 'Science' then science when 'English' then english end as Marks from studentmarks Cross Join (values('Maths'),('Science'),('English')) AS Subjct(Subject) )as D where marks is not null;