2009-11-20 6 views
4

Je sais que cela a été demandé plusieurs fois auparavant, mais je ne trouve aucune solution qui correspond à mon exemple.SQL Convertir des lignes en colonnes

J'ai actuellement un tableau des permissions de l'utilisateur pour utiliser certaines pages. Le tableau se présente comme suit:

UserID pagename   pageid 
----------------------------------- 
1   home    1 
1   contacts   3 
3   home    1 
2   links   2 

Comment puis-je générer une table à partir de ces données où j'ai tous les noms de pages sous forme de tableaux sous forme de colonnes et chaque ligne de la table est un ID utilisateur, la colonne des valeurs d'affichage 0 ou 1 sur la base ou non la table d'origine avait une entrée pour cette page particulière, par exemple:

UserID  home  links contacts 
------------------------------------- 
1   1  0  1 
2   0  1  0 
3   1  0  0 

Votre aide est très appréciée!

+0

Merci pour le formatage ax, j'essayais de comprendre comment le faire. – yogibear

+0

Pivot sans agrégat: http://stackoverflow.com/questions/1343145/tsql-pivot-without-agrgregate-function –

+0

Pourriez-vous donner un exemple? cette page ne montre pas comment c'est fait en utilisant Pivot – yogibear

Répondre

7

Construire votre table @t:

declare @t as table (UserID int, pagename nvarchar(20), pageid int); 
insert into @t values (1,'home',1),(1,'contacts',3),(3,'home',1),(2,'links',2); 

pivoter:

select UserID, 
    case when home is null then 0 else 1 end as home, 
    case when links is null then 0 else 1 end as links, 
    case when contacts is null then 0 else 1 end as contacts 
from @t 
pivot (
    max(pageid) for pagename in ([home],[links],[contacts]) 
) pivotT 

UserID  home  links  contacts 
----------- ----------- ----------- ----------- 
1   1   0   1 
2   0   1   0 
3   1   0   0 
0

Pour transposer facilement des colonnes en lignes avec ses noms, vous devez utiliser XML. Dans mon blog, j'ai été décrit ceci avec l'exemple: Link

+3

c'est facile? Ne cliquez pas, pourrait vous blesser! –

Questions connexes