2010-11-29 6 views
2

Итак, у меня есть две таблицы, вопросы и ответы, соединенные таблицей отношений многих и многих, QuestionsAnswers. У вопросов есть столбец «Сортировка», который позволяет мне контролировать, как они отображаются пользователю, а в «Вопросах» также есть столбец сортировки, который позволяет мне контролировать порядок ответов для каждого Вопроса. Моя проблема в том, что я пытаюсь написать SQL-запрос, который выберет все вопросы и их ответы, упорядоченные сначала с помощью Question.Sort, а затем с помощью QuestionsAnswers.Sort. Оба столбца сортировки имеют значение NULL, а целые числа в этих столбцах должны иметь приоритет над нулями.SQL Order By In Order By

Я могу получить заказ на вопросы. Сортируйте работу отлично, но как только я добавлю во второй столбец сортировки, это пойдет не так. Например, если у Вопроса есть Sort = 0, это означает, что он должен быть первым Вопросом, но не имеет никаких предпочтений для его ответов, он будет упорядочен ниже строки QuestionAnswers, которая имеет Questions.Sort = null и QuestionsAnswers.Sort = 0

Любые советы или мысли, если это даже выполнимо, были бы замечательными.

редактировать:

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

Поделитесь своим фактическим оператором SELECT и дайте образец строк, которые он возвращает, достаточно, чтобы проиллюстрировать проблему. – Narveson 2010-11-29 20:51:29

+0

`ORDER BY` принимает несколько имен разделенных запятыми. – Powerlord 2010-11-29 21:00:11

ответ

5
ORDER BY COALESCE(Questions.Sort, 999999999), COALESCE(Answers.Sort, 999999999) 
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