Eu tenho uma mesa StudentMarks
com colunas Name, Maths, Science, English
. Dados são como
Name, Maths, Science, English
Tilak, 90, 40, 60
Raj, 30, 20, 10
Quero organizá-lo da seguinte maneira:
Name, Subject, Marks
Tilak, Maths, 90
Tilak, Science, 40
Tilak, English, 60
Com o univivido , sou capaz de obter Name, Marks corretamente, mas não consigo obter o nome da coluna na tabela de origem para a Subject
coluna no conjunto de resultados desejado.
Como posso conseguir isso?
Até agora, cheguei à seguinte consulta (para obter Nome, Marcas)
select Name, Marks from studentmarks
Unpivot
(
Marks for details in (Maths, Science, English)
) as UnPvt
sql
sql-server
sql-server-2008
tsql
unpivot
Tilak
fonte
fonte
Respostas:
Sua consulta está muito próxima. Você deve poder usar o seguinte, que inclui o
subject
na lista de seleção final:Veja SQL Fiddle com demonstração
fonte
Você também pode tentar o método não-dinâmico de sql padrão usando uma sequência de lógica com o seguinte código. O código a seguir possui 3 etapas:
remova qualquer combinação nula (se existir, a expressão da tabela poderá ser totalmente evitada se não houver valores nulos estritamente na tabela base)
fonte
SELECT * FROM aluno
UNPIVOT (marcas para disciplinas em (matemática, ciências, inglês));
fonte
Outra maneira de usar a junção cruzada seria especificar nomes de colunas dentro da junção cruzada
fonte