一尘不染

非规范化数据(也许是枢轴?)

sql

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

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

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多行,因此我需要以编程方式执行此操作。谢谢!


阅读 127

收藏
2021-03-10

共1个答案

一尘不染

您可以使用数据透视。您还需要“排名”您的老师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

然后,您可以根据该语句进行操作。这是一个很好的解释:使用数据透视和取消透视

2021-03-10