非规范化数据(也许是一个转轴?)

Dan*_*iel 3 sql t-sql sql-server sql-server-2008

我有一个包含学生编号和相应教师编号的简单表格,我需要对其进行非规范化以输入遗留系统.

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


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

我希望它看起来像这样,将每个教师分成一个单独的列,从左到右填充列.一个商业规则是每个学生的教师不超过六名:


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

Jef*_*ffO 7

你可以使用pivot.你还需要"排名"你的老师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
Run Code Online (Sandbox Code Playgroud)

然后你可以转向这个声明.这是一个很好的解释:使用Pivot和UnPivot