Unpivot z nazwą kolumny
Mam tabelę StudentMarks
z kolumnami Name, Maths, Science, English
.
Dane są jak
Name, Maths, Science, English
Tilak, 90, 40, 60
Raj, 30, 20, 10
Chcę to zorganizować w następujący sposób:
Name, Subject, Marks
Tilak, Maths, 90
Tilak, Science, 40
Tilak, English, 60
Z unpivot jestem w stanie uzyskać nazwę, znaki poprawnie, ale nie jestem w stanie uzyskać nazwy kolumny w tabeli źródłowej do kolumny Subject
W pożądanym zestawie wyników.
Jak mogę to osiągnąć?
Do tej pory dotarłem do następującego zapytania (aby uzyskać nazwę, znaki)
select Name, Marks from studentmarks
Unpivot
(
Marks for details in (Maths, Science, English)
) as UnPvt
2 answers
Twoje zapytanie jest bardzo bliskie. Powinieneś być w stanie użyć następujących, które zawierają subject
na ostatecznej liście wyboru:
select u.name, u.subject, u.marks
from student s
unpivot
(
marks
for subject in (Maths, Science, English)
) u;
Zobacz SQL z demo
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-27 16:20:58
Możesz również wypróbować standardową metodę SQL un-pivoting, używając sekwencji logiki z następującym kodem.. Poniższy kod składa się z 3 kroków:
- tworzenie wielu kopii dla każdego wiersza za pomocą łączenia krzyżowego (również tworzenie kolumny tematu w tym przypadku)
- Utwórz kolumnę "znaczniki" i wypełnij odpowiednie wartości za pomocą wyrażenia case (np. jeśli przedmiotem jest nauka, wybierz wartość z kolumny nauka)
-
Usuń dowolne kombinacje null ( jeśli istnieje, wyrażenie table może być w pełni unikanie, jeśli w tabeli bazowej nie ma bezwzględnie wartości null)
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;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-23 21:51:15