将行数据转换为列

时间:2020-07-23 10:26:38

标签: sql pivot

我有一个表格,其中包含行内的问题和答案,例如

Name    | Question | Answer
Person1| Q1 | A1
Person1| Q2 | A2
Person1| Q3 | A3
Person2| Q1 | A1
Person2| Q2 | A2
Person2| Q3 | A3

example of above table

我需要我的SQL查询来返回一行上的每个人,并将答案作为列标题,并将答案填充在行中,例如

|Name | Q1 | Q2 | Q3 |
Person1 | A1  |A2|  A3 
Person2 | A1  | A2| A3

example of results table I would like

非常感谢任何帮助或建议

2 个答案:

答案 0 :(得分:0)

您可以使用条件聚合:

select name,
       max(case when question = 'Q1' then answer end) as q1,
       max(case when question = 'Q2' then answer end) as q2,
       max(case when question = 'Q3' then answer end) as q3
from t
group by name;

答案 1 :(得分:0)

我为您的问题创建了一个示例=

CREATE table #yourtabl
    ([Name] varchar(10), [Question] varchar(10), [Answer] varchar(10))
;
    
INSERT INTO #yourtabl
    ([Name]  , [Question], [Answer])
VALUES
    ('Person1', 'Q1', 'A1'),
    ('Person1', 'Q2', 'A2'),
    ('Person1', 'Q3', 'A3'),
    ('Person2', 'Q1', 'A1'),
    ('Person2', 'Q2', 'A2'),
    ('Person2', 'Q3', 'A3')
    ;


SELECT * FROM   
(
    SELECT 
        [Name], 
        [Question],
        [Answer]
    FROM 
        #yourtabl
) t 
PIVOT(
    max([Answer]) 
    FOR [Question] IN (
        [Q1], 
        [Q2], 
        [Q3]
        )
) AS pivot_table;

结果=

Name    Q1  Q2  Q3
Person1 A1  A2  A3
Person2 A1  A2  A3
相关问题