w3schools sintaxis multiples multiple ejemplo columns columnas sql sql-server sql-server-2008 tsql unpivot

sql - sintaxis - unpivot oracle



Desenviar con nombre de columna (2)

También puede probar el método de desvinculación sql estándar utilizando una secuencia de lógica con el siguiente código. El siguiente código tiene 3 pasos:

  1. crear copias múltiples para cada fila usando la combinación cruzada (también creando una columna de asunto en este caso)
  2. crear una columna de "marcas" y completar los valores relevantes utilizando la expresión de casos (por ejemplo: si el tema es ciencia, entonces elija el valor de la columna de ciencias)
  3. eliminar cualquier combinación nula (si existe, la expresión de tabla se puede evitar completamente si no hay estrictamente valores nulos en la tabla base)

    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;

Tengo una tabla 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 unpivot puedo obtener Nombre, Marcas correctamente, pero no puedo obtener el nombre de la columna en la tabla fuente en la columna Subject 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


Tu consulta está muy cerca. Debería poder usar lo siguiente que incluye el subject en la lista de selección final:

select u.name, u.subject, u.marks from student s unpivot ( marks for subject in (Maths, Science, English) ) u;

Ver SQL Fiddle con demostración