枢轴功能
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;
目前的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;