2010-11-05 4 views
2

Im assez sûr que je peux utiliser la fonction PIVOT pour résoudre mon problème, mais je ne peux pas le comprendre. Toute assistance sera grandement appréciée.SQL Server PIVOT

j'ai donc une table qui ressemble à

create table Answer (
id int, 
question_id int, 
user_id int, 
answer varchar(1025)) 

et je voudrais écrire une requête qui renvoie un jeu de résultats dans les domaines suivants:

 
user_id, question_1, question_2, question_3 
1,  'answer1', 'answer2', 'answer3' 
2,  'answer1', 'answer2', 'answer3' 
n,  'answer1', 'answer2', 'answer3' 

est-ce encore possible?

TIA

Répondre

1

Assumming cette entrée dans votre table:

insert into answer SELECT 1, 1, 123, 'Answer ZZZZ' 
insert into answer SELECT 2, 2, 123, 'Answer AAAA' 
insert into answer SELECT 3, 3, 123, 'Answer BBBB' 
insert into answer SELECT 4, 1, 345, 'Answer CCCC' 
insert into answer SELECT 5, 2, 345, 'Answer DDDD' 
insert into answer SELECT 6, 1, 678, 'Answer EEEE' 
insert into answer SELECT 7, 2, 678, 'Answer FFFF' 
insert into answer SELECT 8, 3, 678, 'Answer SSSS' 
insert into answer SELECT 9, 3, 999, 'Answer RRRR' 

Vous pouvez faire quelque chose comme ceci:

SELECT user_id, [1] as Answer1, [2] as Answer2, [3] as Answer3 
    FROM (
    SELECT question_id, user_id, answer 
    FROM answer) P 
    PIVOT 
    (
    MAX (answer) 
    FOR Question_id IN ([1], [2], [3]) 
    ) AS pvt 

Vous obtenez ce résultat:

user_id Answer1   Answer2   Answer3 
123 Answer 1  Answer AAAA  Answer BBBB 
345 Answer CCCC  Answer DDDD  NULL 
678 Answer EEEE  Answer FFFF  Answer SSSS 
999 NULL    NULL   Answer RRRR 
+0

awsome merci pour la réponse - juste ce que je cherchais –

+0

vous êtes les bienvenus. Si vous voulez en savoir plus sur PIVOT, consultez mes autres réponses. C'est une fonction utile mais vous devez savoir certaines choses. – Claudia

-1

Possible? Oui.

Souhaitable? Rarement que vous rencontrerez beaucoup de problèmes de performance en faisant cela entièrement en sql. Une fois que le nombre de colonnes dans le pivot dépasse 8 ou plus, les performances disparaissent complètement de la fenêtre.

Est-ce que cela pose des problèmes juridiques? Malheureusement oui. Microsoft dans leur sagesse infinie breveté un "method and system for mapping between logical data and physical data", publié Juillet 2007

Donc, procéder avec prudence.

+1

Je me demande comment une diatribe sur les actions juridiques de Microsoft est pertinent à la question. –

+0

@Randolph: J'ai sorti la diatribe sur les brevets. Cependant, je pense que les gens qui lisent ceci devraient être conscients d'un vrai cauchemar potentiel basé sur cette implémentation de données dynamiques. – NotMe