我有一个SQL查询,它可以准确返回我需要的数据。但是,我在Order By上遇到了麻烦。我想我可能需要某种嵌套选择或Group By,但我从来没有做过其中一种,所以我想知道是否有人可以提供帮助。数据需要首先按centre_id排序,然后按learner_name排序,然后按journey_centre_start排序,但它似乎只按centre_id和learner_name排序,并忽略journey_centre_start的排序。
Journey_centre_start是数据库中具有NULL默认值的日期类型。
SELECT a.learner_id
, a.learner_name
, a.centre_id
, a.learner_status
, b.journey_id
, c.journey_centre_start
FROM learner a
JOIN learner_journey b
ON a.learner_id = b.learner_id
JOIN journey c
ON b.journey_id = c.journey_id
WHERE a.centre_id != 999
AND a.learner_status = 'complete'
ORDER
BY a.centre_id ASC
, a.learner_name ASC
, c.journey_centre_start ASC;
答案 0 :(得分:1)
如果您希望journey_centre_start中的NULL值位于列表的底部,那么您可以在订购时添加CASE语句。
SELECT a.learner_id
, a.learner_name
, a.centre_id
, a.learner_status
, b.journey_id
, c.journey_centre_start
FROM learner a
JOIN learner_journey b
ON a.learner_id = b.learner_id
JOIN journey c
ON b.journey_id = c.journey_id
WHERE a.centre_id != 999
AND a.learner_status = 'complete'
ORDER
BY a.centre_id ASC
, a.learner_name ASC
, CASE WHEN c.journey_centre_start IS NULL THEN 2 ELSE 1 END
, c.journey_centre_start ASC
答案 1 :(得分:0)
感谢所有回复我帖子的人。通过谈论它实际上告诉我,解决方案非常简单。我只需要将Order By语句更改为: 按顺序a.centre_id ASC,c.journey_centre_start ASC,a.learner_name ASC,它给了我想要的结果。 最诚挚的问候你们。