Bob*_*Bob 5 sql-order-by sql-server-2008
我不明白为什么这不起作用:
select distinct a.QuestionID,a.QuestionName,b.AnswerID,b.AnswerName
from @TempExportList a
join tblAnswers b
on a.QuestionID = b.QuestionID
where a.PaperID=@PaperID
order by (case when a.QuestionName='A' then 0
when a.QuestionName='B' then 1
else a.QuestionID
end)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误 -
如果指定了SELECT DISTINCT,则ORDER BY项必须出现在选择列表中.
但这很好用:
select distinct a.QuestionID,a.QuestionName,b.AnswerID,b.AnswerName
from @TempExportList a
join tblAnswers b
on a.QuestionID = b.QuestionID
where a.PaperID=@PaperID
order by a.QuestionID
Run Code Online (Sandbox Code Playgroud)
错误消息完美地解释了问题.
在第一个示例中,ORDER BY项目 - CASE WHEN ... END- 不会出现在SELECT列表中.
在第二个示例中,ORDER BY项目 - a.QuestionID- 确实出现在SELECT列表中.
要修复第一个示例,您需要执行以下操作:
SELECT DISTINCT a.QuestionID, a.QuestionName, b.AnswerID, b.AnswerName,
CASE WHEN a.QuestionName = 'A' THEN 0
WHEN a.QuestionName = 'B' THEN 1
ELSE a.QuestionID
END
FROM @TempExportList AS a
JOIN tblAnswers AS b
ON a.QuestionID = b.QuestionID
WHERE a.PaperID = @PaperID
ORDER BY CASE WHEN a.QuestionName = 'A' THEN 0
WHEN a.QuestionName = 'B' THEN 1
ELSE a.QuestionID
END
Run Code Online (Sandbox Code Playgroud)