我有一个表格,其中包含行内的问题和答案,例如
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
example of results table I would like
非常感谢任何帮助或建议
答案 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