0

いくつかのスタック オーバーフロー ポストでデータ分析を行いたいのですが、適切な形式でクエリ出力を取得する必要があります。私の目標は、投稿 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、Title、および Question を複製します。そして、答えは横に並んでいるのではなく、列に並んでいます。これは私がなんとか書いたクエリです。誰かが私を助けてくれますか、それとも正しい方向に向けてくれますか?

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
4

1 に答える 1

0

行を列に変換するには、テーブルを PIVOT します。

Pivots に関するこの記事を確認してください。欠点は、可能な回答をそれぞれハードコーディングする必要があることです (回答 1、回答 2、...)。

STUFF を使用して 1 つの列に配置します。次のようになります。

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
于 2015-10-01T16:43:06.190 に答える