我有一个简单的表,其中包含学生编号和相应的教师编号,并且需要对它进行规范化以输入到旧系统。
例如,下面是数据现在的样子:
StudNumber TeacherNumber
445 57315
445 88584
445 95842
858 88115
858 65443
858 57315
858 21144
858 18657
858 88584
311 64521
665 35512
665 57315
665 15546
我希望它看起来像这样,将每个Teacher分成一个单独的列,从左到右填充各列。一个业务规则是,每个学生最多只能有六位老师:
StudNum Teacher1 Teacher2 Teacher3 Teacher4 Teacher5 Teacher6
445 57315 88584 95842
858 88115 65443 57315 21144 18657 88584
311 64521
665 35512 57315 15546
原始表中有10,000多行,因此我需要以编程方式执行此操作。
谢谢!
最佳答案
您可以使用数据透视。您还需要“排名”您的老师1-6。请参阅我对您要如何执行操作的评论。目前:
Select StudNumber, TeacherNumber, TeacherRank
from (
Select ST.StudNumber
, ST.TeacherNumber
, ROW_NUMBER() OVER (PARTITION BY ST.StudNumber
ORDER BY ST.TeacherNumber) AS TeacherRank
From StudentTeacher AS ST)
Where TeacherRank <=6
然后,您可以根据该语句进行操作。这是一个很好的解释:Using Pivot and UnPivot