【问题标题】:SQL query in the correct order以正确顺序进行 SQL 查询
【发布时间】:2018-06-24 16:41:16
【问题描述】:

我需要从emp表中查询数据得到如下结果:

Dept No       Emp no      Emp Name        Mgr Name
---------------------------------------------------
10              7782      CLARK           KING
10              7934      MILLER          CLARK
20              7902      FORD            JONES
20              7369      SMITH           FORD
20              7876      ADAMS           SCOTT
20              7566      JONES           KING
20              7788      SCOTT           JONES

我的查询如下:

SELECT DISTINCT e.deptno AS "Dept No", e.empno AS "Emp No", e.ename AS "Emp Name", m.ename AS "Mgr Name"
FROM emp e, emp m
WHERE e.deptno IN (10,20) AND e.mgr = m.empno
ORDER BY "Dept No";

不幸的是,我的 Emp Name 和 Mgr Name 列没有按照与示例匹配的顺序显示:

Dept No       Emp No      Emp Name        Mgr Name
---------------------------------------------------
10              7782      CLARK           KING
10              7934      MILLER          CLARK
20              7369      SMITH           FORD
20              7566      JONES           KING
20              7788      SCOTT           JONES
20              7876      ADAMS           SCOTT
20              7902      FORD            JONES

如何对最后两列进行排序,以便它们按照我需要的顺序显示?

【问题讨论】:

  • 顺序是如何确定的?
  • 您需要在查询中指定您想要的顺序。 SELECT 获得的默认订单不保证是特定的所需订单。从您的示例中不清楚是什么决定了您想要的顺序。按部门编号排序后,它似乎没有按任何其他属性排序。
  • 今日提示:切换到现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。
  • Emp name 和 Mgr name 在您的预期结果中都是无序的,所以不要费心去订购它们。
  • 您需要回到设置您的任务的人那里,并要求他们定义管理排序顺序的规则。因为您发布的结果集似乎是用deptno 随机排序的,所以我们无法提供比您已有的更好的解决方案。

标签: sql oracle sql-order-by


【解决方案1】:

要按多列排序,您只需添加逗号和要排序的下一个字段的名称,按重要性顺序排列。

例如:

ORDER BY "Dept No", "Emp Name", "Mgr Name"

我不确定您希望列的顺序是什么,但这是通用的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多