为了实现您的目标,您需要使用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演示