当前位置: 首页 > 知识库问答 >
问题:

PL\SQL从第1列中选择第一行,其中第2列是唯一的

宋康安
2023-03-14

我刚开始学习SQL。我正在使用Oracle数据库。

表emp中包含empno、ename、job、mgr、hiredate、sal、comm、deptno列。

我想从ename列中获取每个deptno的第一条记录,ename必须按asc排序。

以下SQL工作:

Select ename
from (Select d.ename
From emp d
Where d.deptno = 10
Order by ename asc)
where rownum <= 1
Union
Select ename
from (Select d.ename
From emp d
Where d.deptno = 20
Order by ename asc)
where rownum <= 1
Union
Select ename
from (Select d.ename
From emp d
Where d.deptno = 30
Order by ename asc)
where rownum <= 1
Union
Select ename
from (Select d.ename
From emp d
Where d.deptno = 40
Order by ename asc)
where rownum <= 1

我想优化它,所以我不需要重写它,如果我添加一些记录到deptno列。

我用SELECTdistinct-like进行了尝试

SELECT ename FROM emp WHERE (SELECT distinct deptno FROM emp)

共有2个答案

毕嘉
2023-03-14

另一种方法去做

SELECT d.deptno, 
       (SELECT ename 
          FROM emp e 
         WHERE e.deptno = d.deptno AND ROWNUM <=1) ename
  FROM dep d 

SQLFiddle

陶温书
2023-03-14

如果我理解你试图正确地做什么,下面的方法应该会起作用:

SELECT MIN(d.ename) as ename
  FROM emp d
  GROUP BY d.deptno
  ORDER BY ename asc

在这里摆弄。

 类似资料:
  • 问题内容: 我有一个表的列,,,使得 给我下表 我将如何获得每个x,y组的第一行?也就是说,我将如何获得下表 这是第二个示例:对于这样的表T 我期望得到 问题答案: 考虑到SQL 2005或更高版本:

  • 我找不到关于我的问题的答案,因为所有类似于这个问题的问题都没有在最大值中使用可为null的int并从中获得1列。 我的表格如下: 第一个版本是NULL,以下所有版本都得到一个以1开头的数字。 所以现在我只想获取最新合约的行(如行后面的注释所示)。 因此,对于每个合同号,我想从最新的合同版本中选择合同号。 函数不能工作,因为它是一个可为null的int。 所以我想将与函数结合使用,但我不知道如何使用

  • 问题内容: 我有表,其中有一列可能在突发中具有相同的值。像这样: 现在,我要修剪重复值的行,并仅选择第一个出现的行。 对于上表,结果应为: 如何在SQL中执行此操作? 请注意,仅应删除突发行,并且可以在非突发行中重复值! &在样本结果中重复。 编辑: 我用这个实现了它: 但这仅在ID为顺序的时才有效。id(已删除的ID)之间有间隔,查询中断。我怎样才能解决这个问题? 问题答案: 您可以使用半联接来

  • 问题内容: 我有一个MySQL表,其中包含以下类型的信息: 这是我用来从该表获取数据的脚本示例: 该脚本显示表格中的每个日期,例如 我只想显示唯一的日期,例如 问题答案: 在MySQL中使用DISTINCT运算符:

  • 注意:我已经查看了文件的十六进制,没有什么不合适的