目標を達成するには、使用する必要がありSTUFF()
ますGROUP BY
SELECT q.Question + ';' +
STUFF((SELECT ';' + Answer
FROM Answers
WHERE Question_Id = q.Question_Id
ORDER BY 1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'') result
FROM Questions q LEFT JOIN Answers a
ON q.Question_Id = a.Question_Id
GROUP BY q.Question_Id, q.Question
出力例:
| | 結果 |
-----------------------------------------------
| | 質問を繰り返してもらえますか;多分;いいえ;はい |
| | その質問を本当に繰り返してもらえますか;確かに;はい |
これがSQLFiddleのデモです
回答がまだ割り当てられていない質問がある可能性があり、それらを適切に表示したい場合は、ISNULL()
orを使用できますCOALESCE()
(たとえば、デフォルト値を挿入するため)。
SELECT q.Question + ';' +
ISNULL(STUFF((SELECT ';' + Answer
FROM Answers
WHERE Question_Id = q.Question_Id
ORDER BY 1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,''),
'[Sorry, no answers yet]') result
FROM Questions q LEFT JOIN Answers a
ON q.Question_Id = a.Question_Id
GROUP BY q.Question_Id, q.Question
出力例:
| | 結果 |
-------------------------------------------------- --------
| | 質問を繰り返してもらえますか;多分;いいえ;はい |
| | その質問を本当に繰り返してもらえますか;確かに;はい |
| | 質問に回答がないことはありますか?[申し訳ありませんが、まだ回答がありません] |
これがSQLFiddleのデモです