将行数据转换为列

ar5n3qh5  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(333)

我有一个表,表中的问题和答案的行内如

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

上表示例
我需要我的sql查询返回一行中的每个人,答案是列标题,答案填充在行中

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

我想要的结果表的例子
非常感谢任何帮助或建议

rkttyhzu

rkttyhzu1#

可以使用条件聚合:

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;
5f0d552i

5f0d552i2#

我为你的问题举了个例子=

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

相关问题