枢轴功能

Pivot functionality

目前的table是这样的

ID|reg_ num|student_name|maths|computer |language|total
--+--------+------------+-----+---------+--------+------
1 |001     |james       |50   |50       |50      |150
2 |002     |john        |60   |50       |50      |160
3 |003     |alex        |50   |70       |50      |170
4 |004     |david       |50   |50       |80      |180

但我需要 table 这样的方式:

register_ number|subjects |marks
----------------+---------+---
              1 |maths    |50 (again)
              1 |languages|40 ....

直到列出 register_number 1 的所有主题,我需要跟进 reg_number - 2 直到找到特定 table 中的记录数

我很确定要使用 [pivot] 函数,但不知道如何根据行中的特定 [register_number] 实体添加特定行的多列

提前致谢

你想要 unpivot 而不是 pivot :

select t.register_number, tt.subjects, tt.marks
from table t cross apply
     ( values ('maths', maths),
              ('computer', computer),
               . . . ,
              ('total', total)
     ) tt (subjects, marks);

我认为你应该使用 unpivot 试试这个查询

select u.register_number, u.subject, u.marks
from studentmarks s
unpivot
(
  marks
  for subject in (Maths,computer,...)
) U;