首页 > 解决方案 > 如何根据多列按行排序

问题描述

我有这个要排序的记录表列表。 记录

其中 MAIN_NAME 是父亲的名字,STUDENT_NAME 是他们儿子/女儿的名字。如果记录是父亲本身,则为空值,并且 IDENTIFIER 其中 1 表示数据是父亲实体,而 2 是学生。

我试过在 CREATED_DATE,MAIN_NAME 之前订购它们。但是标识符为 1 的所有记录都将位于标识符为 2 的所有记录之上。

也尝试过 MAIN_NAME,CREATED_DATE。但 MAIN_NAME=ANDREW 将比 Joseph 更早进入,后者比前者注册得更早。

我有点困惑,因为日期都是独一无二的。

这应该是预期的结果。 预期结果

记录应按 CREATED_DATE 排序,但学生仍应标记在其父亲的 (MAIN_NAME) 记录下。

标签: sqlsql-order-by

解决方案


您可以在order by. 所以,我想你想要父母的创建日期,然后是孩子,然后是在那个父母下的顺序。

您可以使用:

order by min(case when student_name is null then registration_date end) over (partition by main_name),
         main_name,
         (case when student_name is null then 1 else 2 end),
         registration_date

逻辑是:

  • 按“主要”注册日期升序排列;
  • 如果日期有关系,请按 订购main_name
  • 然后确保“主要名称”记录首先出现。
  • 然后按子记录排序。

推荐阅读