【问题标题】:Reorder columns and rows in StackExchange query对 StackExchange 查询中的列和行重新排序
【发布时间】:2015-12-29 18:28:50
【问题描述】:

我想对一些 Stack Overflow 帖子进行数据分析,并且需要以正确的格式获取查询输出。我的目标是输入 Post 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

【问题讨论】:

  • 如果我理解正确,我的主要问题是,在 StackExchange 数据库模式中,问题和答案存储在同一个表中,该列称为正文。唯一不同的是,问题的 posttypeid = 1 和答案 posttypeid = 2。

标签: sql tsql dataexplorer


【解决方案1】:

您需要 PIVOT 表以将行转换为列。

查看this article about Pivots。缺点是您需要对每个可能的answer进行硬编码,而您不知道会有多少个(Answer1、Answer2、...)。

使用 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

【讨论】:

  • 不幸的是,我有大约 15.000 个我想查询的帖子 ID。所以我不知道每个问题有多少答案。你还有其他建议吗?如果我尝试在一个单元格中获得所有答案(Answer1,Answer2,..AnswerN),它会变得更容易/是否可能。谢谢你的回答
  • 如果您想在一列中找到所有答案,您可以使用 STUFF - stackoverflow.com/questions/21623593/…
  • 感谢您的回答。我尝试使用它,但还没有解决我的问题。使用您的查询,我收到此错误消息:“t”列多次指定“正文”。无法绑定多部分标识符“p.Id”。无法绑定多部分标识符“p.Title”。无法绑定多部分标识符“p.Body”。无法绑定多部分标识符“k.Body”。
  • 抱歉 - 我把它写在了我的头顶上,我忘了给列加上别名(2 个正文列导致了冲突)。
  • 再次感谢您的回复。错误现在更短:无法绑定多部分标识符“k.Body”。我会尝试自己修复它,但机会很糟糕:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
相关资源
最近更新 更多