按顺序排序的SQL顺序

时间:2010-11-29 20:46:07

标签: sql select sql-order-by

所以我有两个表,问题和答案,由多对多关系表,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;

2 个答案:

答案 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