【发布时间】:2010-11-29 20:46:07
【问题描述】:
所以我有两个表,问题和答案,由多对多关系表 QuestionsAnswers 连接。问题有一个排序列,允许我控制它们如何显示给用户,并且 QuestionsAnswers 也有一个排序列,允许我控制每个问题的答案的顺序。我的问题是我正在尝试编写一个 SQL 查询,它将选择首先按 Question.Sort 然后按 QuestionsAnswers.Sort 排序的所有问题及其答案。两个排序列都可以为空,并且这些列中的整数应优先于空值。
我可以让 Order By Questions.Sort 正常工作,但是一旦我添加到第二个排序列中,它就会出错。例如,如果一个问题的 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;
【问题讨论】:
-
分享您的实际 SELECT 语句,并给出它返回的行的示例,足以说明问题。
-
ORDER BY接受多个以逗号分隔的列名。 -
是的,我的问题是,由于任何一列都可以为空,它们会在排序中相互跳过。我想完全按 Questions.Sort 排序,然后在每个子组中按 QuestionsAnswers.Sort 排序
-
在列上使用
coalesce为null列提供有效(大)值。您当前对isnumeric的使用使所有非空值都等于1,这可能不是您想要的。
标签: sql select sql-order-by