在StackExchange查询中重新排序列和行

时间:2015-10-01 16:02:38

标签: sql tsql dataexplorer

我想对某些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

1 个答案:

答案 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