Tengo una mesa StudentMarks
con columnas Name, Maths, Science, English
. Los datos son como
Name, Maths, Science, English
Tilak, 90, 40, 60
Raj, 30, 20, 10
Quiero arreglarlo de la siguiente manera:
Name, Subject, Marks
Tilak, Maths, 90
Tilak, Science, 40
Tilak, English, 60
Con Univot, puedo obtener Nombre, Marcas correctamente, pero no puedo obtener el nombre de la columna en la tabla de origen a la Subject
columna en el conjunto de resultados deseado.
¿Cómo puedo conseguir esto?
Hasta ahora he llegado a la siguiente consulta (para obtener Nombre, Marcas)
select Name, Marks from studentmarks
Unpivot
(
Marks for details in (Maths, Science, English)
) as UnPvt
Respuestas:
Tu consulta está muy cerca. Debería poder utilizar lo siguiente, que incluye
subject
en la lista de selección final:Ver SQL Fiddle con demo
fuente
También puede probar el método estándar de desenvolvimiento de sql utilizando una secuencia de lógica con el siguiente código. El siguiente código tiene 3 pasos:
eliminar cualquier combinación nula (si existe, la expresión de la tabla se puede evitar por completo si no hay valores nulos en la tabla base)
fuente
SELECCIONAR * DE estudiante
UNPIVOT (Marcas PARA asignaturas en (Matemáticas, Ciencias, Inglés));
fuente
Otra forma de usar la unión cruzada sería especificar nombres de columna dentro de la unión cruzada
fuente