我有一个简单的表,其中包含学生编号和相应的教师编号,并且需要对它进行规范化以输入到旧系统。

例如,下面是数据现在的样子:


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

09-27 20:46