很難從你的問題告訴你在哪裏希望能得到AnswerID。如果你想在一個專欄中,你將需要使用@ StayPuft的答案。如果你想把它當作文本列的一部分,你可以使用下面的SQL:
SELECT questionText, [1], [2], [3]
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY QuestionID ORDER BY newid()) AnswerInQuestionID,
CAST(AnswerID AS VARCHAR(20)) + ' - ' + answerTxt AS answerTxt,
QuestionText
FROM questions q
JOIN answers a
ON q.QuestionID=a.answer_question_id
) A
PIVOT
(
MAX(answerTxt)
FOR AnswerInQuestionID IN ([1], [2], [3])
) as piv
如果你希望他們三個單獨的列,您可以使用下面的SQL:
SELECT
questionText,
LEFT([1], 1) AS AnswerID1,
RIGHT([1], LEN([1]) - 1) AS AnswerText1,
LEFT([2], 1) AS AnswerID2,
RIGHT([1], LEN([1]) - 1) AS AnswerText1,
LEFT([3], 1) AS AnswerID3,
RIGHT([2], LEN([3]) - 1) AS AnswerText3
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY QuestionID ORDER BY newid()) AnswerInQuestionID,
CAST(AnswerID AS VARCHAR(20)) + answerTxt AS answerTxt,
QuestionText
FROM questions q
JOIN answers a
ON q.QuestionID=a.answer_question_id
) A
PIVOT
(
MAX(answerTxt)
FOR AnswerInQuestionID IN ([1], [2], [3])
) as piv
編輯:添加了CHARINDEX()函數和管道('|')以允許不同的數字長度。可能有這樣做的更簡潔的方式,但這個工作對我來說:
SELECT
questionText,
LEFT([1], CHARINDEX('|', [1]) -1) AS AnswerID1,
RIGHT([1], LEN([1]) - CHARINDEX('|', [1])) AS AnswerText1,
LEFT([2], CHARINDEX('|', [2]) -1) AS AnswerID2,
RIGHT([2], LEN([2]) - CHARINDEX('|', [2])) AS AnswerText2,
LEFT([3], CHARINDEX('|', [3]) -1) AS AnswerID3,
RIGHT([3], LEN([3]) - CHARINDEX('|', [3])) AS AnswerText3
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY QuestionID ORDER BY newid()) AnswerInQuestionID,
CAST(AnswerID AS VARCHAR(20)) +'|'+ answerTxt AS answerTxt,
QuestionText
FROM questions q
JOIN answers a
ON q.QuestionID=a.answer_question_id
) A
PIVOT
(
MAX(answerTxt)
FOR AnswerInQuestionID IN ([1], [2], [3])
) as piv
的[選擇從SQL Server表n個隨機行]可能重複(http://stackoverflow.com/questions/848872/select-n -random-rows-from-sql-server-table) – vittore
nope。這個sql完全沒有問題。我只是想添加答案ID到視圖 – sheldon