Отмена с именем столбца
у меня есть таблица 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;