查询列值作为调查结果的列别名

时间:2016-10-07 10:32:02

标签: sql sql-server

我在构建以下方案的查询时遇到问题。我列出了一个示例表格和值:

回应表

Q_ID | Response_ID | answer_col_label | answer_value  
10   | 500         | Label_a          | 1  
11   | 501         | Label_b          | 2  
12   | 502         | Label_c          | 3  

然后在结果表中,值如下:

结果表

Q_ID | Response_ID | answers   
10   | 500         | 502   

在结果表中,在答案栏中按下了response_id,这意味着用户从单选按钮/复选框中选择了此response_id。

现在我想创建一个查询,我希望在列标题中显示answer_col_label值(Lable_a),以包括响应表的所有响应,并在该列标题下显示answer_value作为选定结果。

请帮我在SQL Server中创建此查询。感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:0)

使用PIVOT

SELECT P.*
FROM
    (
    SELECT A.Q_ID, A.Response_ID, A.answer_col_label, B.answers
    FROM @ResponseTable AS A
    INNER JOIN @ResultsTable AS B
        ON A.Q_ID = B.Q_ID 
            AND A.Response_ID = B.Response_ID
) AS S
PIVOT
(
    MAX(answers) FOR answer_col_label IN ([Label_a], [Label_b], <and other labels>)
) AS P