2010-11-05 4 views
2

Я уверен, что могу использовать функцию PIVOT для решения моей проблемы, но я просто не могу понять это. Будем очень благодарны любой помощи.SQL Server PIVOT

Так я таблицу, которая выглядит как

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

и я хотел бы написать запрос, который возвращает набор результатов в следующем:

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

это вообще возможно?

TIA

ответ

1

Assumming этот вход в вашей таблице:

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' 

Вы можете сделать что-то вроде этого:

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 

Вы получите этот результат:

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 благодарит за ответ - именно то, что я искал –

+0

, приветствуется. Если вы хотите узнать больше о PIVOT, см. Мои другие ответы. Это полезная функция, но есть некоторые вещи, которые вы знаете. – Claudia

-1

Возможно ли? Да.

Желательно? Редко, так как вы столкнетесь с множеством проблем с производительностью, делая это полностью в sql. Как только количество столбцов в столбце превышает 8 или около того, производительность полностью выходит из окна.

Это связано с юридическими проблемами? К сожалению, да. Microsoft в своей бесконечной мудрости запатентовала «method and system for mapping between logical data and physical data», выпущенную в июле 2007 года

Итак, действуйте с осторожностью.

+1

мне интересно, как громкие слова о юридических действиях Microsoft имеет отношение к вопросу. –

+0

@ Рэндольф: Я вынул напыщенную надпись. Тем не менее, я чувствую, что люди, читающие это, должны знать о очень реальном потенциальном кошмаре, основанном на этой реализации динамических данных. – NotMe