2009-10-30 5 views
2

J'ai une grande table que j'ai importée d'une feuille de calcul Excel. Pour cinq des colonnes, contenant les noms des enseignants, je voudrais réduire tous les espaces vides dans chaque ligne afin que je n'ai aucun espace à gauche de n'importe quel nom. Un exemple montrerait probablement mieux ce que je veux dire.Réduire les colonnes vides pour chaque ligne

Voici un exemple des données maintenant:

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 

Et j'aimerais effondrer les blancs à gauche, il ressemble à ceci:

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 

Je dois le faire De cette façon, je vais le coller dans un modèle Excel mandaté par l'état, et je ne peux pas avoir d'espaces à gauche des noms des enseignants, seulement des espaces à droite.

Merci!

Répondre

2

Vous pouvez Unpivot, ROW_NUMBER() sur l'enseignant et pivot à nouveau ... c'est:

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

Merci beaucoup! – Daniel

Questions connexes