SQL选择不同的行值作为列标题维护单个行值

时间:2015-10-06 14:16:34

标签: sql sql-server

我有一个看起来像这样的表:

    QuestionNum  AnswerChoice
    1            a
    1            a
    2            b
    2            b
    2            a
    3            c
    3            d
    3            c
    4            a
    4            b

我想从QuestionNum列中选择不同的值作为列标题,并仍然列出下面的每个答案选项,所以它应该如下所示:

    1    2    3    4
    a    b    c    a
    a    b    d    b
         a    c   

我开始查看Pivot表,但QuestionNum将是未知的。另外,我无法找到从原始行中选择多行的方法。

1 个答案:

答案 0 :(得分:0)

您可以使用条件聚合执行此操作。挑战在于您需要一个密钥,row_number()提供密钥:

select max(case when QuestionNum = 1 then AnswerChoice end) as q_1,
       max(case when QuestionNum = 2 then AnswerChoice end) as q_2,
       max(case when QuestionNum = 3 then AnswerChoice end) as q_3,
       max(case when QuestionNum = 4 then AnswerChoice end) as q_4       
from (select t.*,
             row_number() over (partition by QuestionNum order by examInstanceID) as seqnum
      from table t
     ) t
group by seqnum;