所以我有两个表,问题和答案,由多对多关系表,QuestionsAnswers加入。问题有一个排序列,允许我控制它们向用户显示的方式,而QuestionsAnswers也有一个排序列,允许我控制每个问题的答案顺序。我的问题是我正在尝试编写一个SQL查询,它将选择所有问题及其答案首先由Question.Sort然后由QuestionsAnswers.Sort排序。两个排序列都可以为空,这些列中的整数应优先于空值。
我可以通过Questions.Sort获得订单工作正常但是一旦我添加了第二个排序列,它就会出错。例如,如果一个问题的排序= 0意味着它应该是显示的第一个问题,但没有对其答案的任何偏好,它将在一个Questions.Sort = null和QuestionsAnswers.Sort = 0的QuestionsAnswers行下面排序。
任何提示或想法,如果这是可行的将是伟大的。
编辑:
SELECT
Q.Id AS QuestionId,
Q.Name AS Question,
A.Id AS AnswerId,
A.Text AS Answer
FROM
dbo.Questions AS Q
INNER JOIN
dbo.QuestionsAnswers AS QA
ON Q.Id = QA.QuestionId
INNER JOIN
dbo.Answers AS A
ON QA.AnswerId = A.Id
ORDER BY
ISNUMERIC(Q.Sort) DESC,
Q.Sort,
Q.Id,
A.Text;
答案 0 :(得分:5)
ORDER BY COALESCE(Questions.Sort, 999999999), COALESCE(Answers.Sort, 999999999)
答案 1 :(得分:2)
从我能看到的东西应该可以做到这一点。除非我遗漏了什么。
select questions.*, answers.*
from questionsanswers qa
inner join questions
on questions.idquestions = qa.questionid
inner join answers
on answers.idanswers = qa.answerid
order by isnull(questions.sort), questions.sort, isnull(qa.sort), qa.sort