我想对某些Stack Overflow帖子进行数据分析,并且需要以正确的格式获取查询输出。我的目标是输入帖子ID并以下列格式得到我的答案:
ID|Title|Question|Answer1|Answer2|Answer3|Answer4|Answer5|Answer...
__________________________________________________________________
1 |Tit 1|Quest 1 |1.Answ |2.Answ |3.Answ |4.Answ |5.Answ |Answer...
2 |Tit 2|Quest 2 |1.Answ |2.Answ |3.Answ | | |
3 |Tit 3|Quest 3 |1.Answ |2.Answ |3.Answ |4.Answ | |
我不熟悉在StackExchange上编写查询,但我设法编写一个查询来获得几乎正确的输出。我的结果是这样的:
ID|Title|Question|Answer|
_________________________
1 |Tit 1|Quest 1 |1.Answ |
1 |Tit 1|Quest 1 |2.Answ |
1 |Tit 1|Quest 1 |3.Answ |
2 |Tit 2|Quest 2 |2.Answ |
2 |Tit 2|Quest 2 |2.Answ |
2 |Tit 2|Quest 2 |2.Answ |
如您所见,我为每个答案复制了ID,标题和问题。答案是在一列而不是并排。 这是我设法编写的查询。有人可以帮助我,或指出我正确的方向吗?
select
p.Id, p.Title, p.Body, k.Body
from
Posts as p inner join
Posts as k on
p.id = k.parentid
where
p.Id in (##id##) and k.posttypeid=2
答案 0 :(得分:0)
您希望将表格PIVOT以将行转换为列。
结帐this article about Pivots。缺点是你需要硬编码每个可能的答案,你不知道会有多少(答案1,答案2,......)。
使用STUFF将其放在一列中 - 类似于:
SELECT Id, Title, Q,
STUFF(
(
SELECT '|'+ Body FROM POSTS WHERE Id = t.Id FOR XML path('') ), 1, 1, '')
FROM (
SELECT p.Id, p.Title, p.Body AS Q, k.Body AS ANS
FROM Posts as p
INNER JOIN Posts AS k ON
p.id = k.parentid
WHERE p.Id in (##id##) AND k.posttypeid=2 ) t