2009-10-30 216 views
2

我有一張從Excel電子表格導入的大表格。對於包含教師姓名的五列,我想摺疊每行中的所有空白,所以我沒有任何姓名左側的空白。一個例子可能會更好地表明我的意思。摺疊每行的空白列

這裏的數據的例子現在:

Student ID Teacher1 Teacher2 Teacher3 Teacher4 Teacher5 
445633  Mary    Deb  Juan 
876302  Trevor Juan  Mary  Val  Deb 
659404  Luo          Trevor 
535485       Deb  
775431    Val       Luo 
565002    Luo  Mary    Juan 

而且我想空白崩潰的左側,所以它看起來是這樣的:

Student ID Teacher1 Teacher2 Teacher3 Teacher4 Teacher5 
445633  Mary  Deb  Juan  
876302  Trevor Juan  Mary  Val  Deb 
659404  Luo  Trevor  
535485  Deb   
775431  Val  Luo  
565002  Luo  Mary  Juan 

我必須這樣做這種方式是因爲我將它粘貼到一個國家規定的Excel模板中,而且我無法在教師姓名的左邊留下任何空白,只有空白纔是正確的。

謝謝!

回答

2

您可以逆透視,ROW_NUMBER()在教師和樞軸再次...那就是:

declare @t1 as table (StudentID int, Teacher1 nvarchar(100), Teacher2 nvarchar(100), Teacher3 nvarchar(100), Teacher4 nvarchar(100), Teacher5 nvarchar(100)); 
insert into @t1 values (445633,'Mary',NULL,'Deb','Juan',NULL),(876302,'Trevor','Juan','Mary','Val','Deb'), 
(659404,'Luo',NULL,NULL,NULL,'Trevor'),(535485,NULL,NULL,NULL,'Deb',NULL), 
(775431,NULL,NULL,'Val',NULL,'Luo'),(565002,NULL,NULL,'Luo','Mary','Juan'); 

with UnpivotT as (
    SELECT StudentID, TeacherName, TeacherColumn as OriginalColumn 
    from @t1 unpivot (
     TeacherName for TeacherColumn in ([Teacher1],[Teacher2],[Teacher3],[Teacher4],[Teacher5]) 
    ) uT 
), NewColumnT as (
    select StudentID, TeacherName, 'Teacher'+(
      convert(nvarchar(100), ROW_NUMBER() OVER (PARTITION BY StudentID ORDER BY OriginalColumn)) 
     ) as NewColumn 
    from UnpivotT 
) 
select * 
from NewColumnT 
pivot (
    max(TeacherName) for NewColumn in ([Teacher1],[Teacher2],[Teacher3],[Teacher4],[Teacher5]) 
) as pivotT 
+0

非常感謝您! – Daniel