我有一个sql查询,它精确地返回我需要的数据。但是,我在Order By上遇到了问题。我想我可能需要一些嵌套的select或Group By,但我从来没有做过,所以我想知道是否有人可以帮助我。数据需要首先按centre_id排序,然后按learner_name排序,然后按journey_centre_start排序,但它似乎只按centre_id和learner_name排序,而忽略了对journey_centre_start的排序。
Journey_centre_start是数据库中具有空默认值的日期类型。
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;
发布于 2016-06-24 18:30:07
如果您希望journey_centre_start中的空值位于列表的底部,则可以将CASE语句添加到您的ordering`
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
发布于 2016-06-25 11:22:17
感谢所有回复我帖子的人。通过讨论它,我真正意识到解决方案非常简单。我只需要将Order By语句改为: ORDER BY a.centre_id ASC,c.journey_centre_start ASC,a.learner_name ASC,它就给了我想要的结果。向你们大家致以最亲切的问候。
https://stackoverflow.com/questions/38017561
复制相似问题