2010-11-05 63 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谢谢你的答案 - 正是我在找 – 2010-11-05 15:43:52

+0

不客气。如果你想知道更多的PIVOT,请参阅我的其他答案。这是一个有用的功能,但有一些你知道的事情。 – Claudia 2010-11-05 16:09:31

-1

可能吗?是。

可取吗?很少会遇到很多性能问题,完全是在sql中完成的。一旦关键数据列的数量超过了8左右,性能就完全消失了。

这是否带有法律问题?不幸的是,是的。微软以其无限的智慧获得了专利“method and system for mapping between logical data and physical data”,2007年7月发布

因此,请谨慎行事。

+1

我不知道如何夸大其词关于微软的法律行为与这个问题有关。 – 2010-11-05 15:29:04

+0

@Randolph:我抨击了专利。不过,我觉得读这本书的人应该意识到基于这种动态数据实现的非常现实的潜在噩梦。 – NotMe 2010-11-05 15:35:50