首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORACLE ROWNUM

ORACLE ROWNUM
EN

Stack Overflow用户
提问于 2009-01-15 06:33:00
回答 2查看 2K关注 0票数 1

我有一个名为ID_EMPLOYEE_MASTER的employee表,其中包含字段

代码语言:javascript
复制
EMP_CODE,
EMP_NAME,
EMP_JOIN_DATE,
EMP_STATUS,
EMP_BASIC,
EMP_ACCOUNT,
EMP_BANK

我想查询所有状态为'P‘ie..PRESENT的员工,即他们的银行账户。EMP_ACCOUNT,它们的基本ie EMP_BASIC,它们的名字ie..EMP_NAME,然后给出一个序列号,然后是它们的EMP_CODE

我尝试了以下查询:

代码语言:javascript
复制
SELECT'01'||TO_CHAR(SYSDATE,'MMYY')||RPAD(EMP_ACCOUNT,16,'0')||
LPAD(EMP_BASIC,18,'0')||RPAD(EMP_NAME,32,'0')||LPAD(ROWNUM,4,'0')||
LPAD(EMP_CODE,10,'0') AS " " 
FROM ID_EMPLOYEE_MASTER WHERE EMP_STATUS='P' 
                        AND EMP_BANK='BM_CB' ORDER BY EMP_JOIN_DATE,ROWNUM

我希望显示的格式为:

代码语言:javascript
复制
0115090023194700084016000000000002112000DILIPKUMARAG00000000000000000000010000000029

问题是结果不能正确显示。

如果Dilip Kumar是年龄最大的员工,那么他的名字将首先显示,但他的序列号不会显示为0001,而是显示为0013

另一个问题是工资,我希望它显示在OMANI里亚尔和一些BAISA,这是小数点后3位,但我不能让DAISA显示,只有里亚尔显示。我得到的输出如下所示:

代码语言:javascript
复制
0115090023194700084016000000000000002112DILIPKUMARAG0000000000000000000130000000029

请帮帮我...:(

EN

回答 2

Stack Overflow用户

发布于 2009-01-15 21:35:32

在应用ORDER BY之前,会在检索行时分配ROWNUM。所以它们不会以你想要的顺序出现。你可以使用几种不同的技巧。

(1)嵌套查询

代码语言:javascript
复制
SELECT <your long expression here> FROM (
  SELECT *
    FROM id_employee_master
  ORDER BY emp_join_date
  )

外部查询中的ROWNUM将在从内部查询返回行时被分配,因此它们将按照您想要的顺序出现。这是一种黑客行为。

(2)解析函数

使用ROW_NUMBER() OVER ( ORDER BY emp_join_date )代替ROWNUM。这将根据该显式排序来分配数字。这是一种更干净的方法。

在另一个问题上。我猜EMP_BASIC就是薪水吧?如果它是数字类型,那么您将隐式地将其转换为字符串,并且默认格式将删除无关紧要的数字。您希望使用显式TO_CHAR调用来指定所需的确切格式。

票数 7
EN

Stack Overflow用户

发布于 2015-01-09 04:48:14

rownum错误..请记住:

代码语言:javascript
复制
SELECT * 
FROM  
( SELECT mt.mydata
  FROM myTable mt
  WHERE mt.myId = xxx
  ORDER BY mt.myDate DESC
) 
WHERE ROWNUM <= 1; --for example if you want last row 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/445856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档