要實現你的目標,你需要使用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
輸出示例:
| RESULT |
-----------------------------------------------
| Can You Repeat The Question;Maybe;No;Yes |
| Can You Really Repeat The Question;Sure;Yes |
這裏是SQLFiddle演示
如果有問題的可能性沒有答案被分配,你想正確顯示T.您可以使用ISNULL()
或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
輸出示例:
| RESULT |
----------------------------------------------------------
| Can You Repeat The Question;Maybe;No;Yes |
| Can You Really Repeat The Question;Sure;Yes |
| Can a question have no answers;[Sorry, no answers yet] |
這裏是SQLFiddle演示
你試圖運行呢? –