列Name, Maths, Science, English
を持つテーブルStudentMarks
があります。データはこんな感じ
Name, Maths, Science, English
Tilak, 90, 40, 60
Raj, 30, 20, 10
私はそれを次のように整理したいです。
Name, Subject, Marks
Tilak, Maths, 90
Tilak, Science, 40
Tilak, English, 60
With npivot Name、Marksを正しく取得できますが、ソーステーブルの列名を目的の結果セットのSubject
列に取得できません。
どうすればこれを達成できますか?
私はこれまでに次のクエリにたどり着きました(名前、マークを取得するため)
select Name, Marks from studentmarks
Unpivot
(
Marks for details in (Maths, Science, English)
) as UnPvt
あなたの質問は非常に近いです。最終的な選択リストにsubject
を含む次のものを使用できるはずです。
select u.name, u.subject, u.marks
from student s
unpivot
(
marks
for subject in (Maths, Science, English)
) u;
SQL Fiddleデモ付き を参照してください。
次のコードで一連のロジックを使用して、標準のSQLアンピボット方法を試すこともできます。次のコードには、3つのステップがあります。
nULLの組み合わせを削除します(存在する場合、基本表に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;
SELECT * FROM学生
UNPIVOT(Marks for subject in(Maths、Science、English));