当前位置:  开发笔记 > 编程语言 > 正文

ORACLE ROWNUM

如何解决《ORACLEROWNUM》经验,为你挑选了1个好方法。

我有一个ID_EMPLOYEE_MASTER带有字段的员工表

EMP_CODE,
EMP_NAME,
EMP_JOIN_DATE,
EMP_STATUS,
EMP_BASIC,
EMP_ACCOUNT,
EMP_BANK

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

我尝试了以下查询:

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

我想显示的格式是:

0115090023194700084016000000000002112000DILIPKUMARAG00000000000000000000010000000029

问题是结果无法正常显示.

如果Dilip Kumar是最老的员工,他的名字会首先显示,但他的序列号不会显示为,0001但它显示为0013.

另一个问题是工资,我希望它显示在OMANI RIALS和一些BAISA,这是小数点后3位,但是我无法显示DAISA,只显示RIALS.我得到的输出如下:

0115090023194700084016000000000000002112DILIPKUMARAG0000000000000000000130000000029

请帮我...:(



1> Dave Costa..:

在应用ORDER BY之前,在检索行时分配ROWNUM.所以他们不会按照你想要的顺序出来.您可以使用几种不同的技巧.

(1)嵌套查询

SELECT  FROM (
  SELECT *
    FROM id_employee_master
  ORDER BY emp_join_date
  )

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

(2)分析功能

而不是ROWNUM,使用ROW_NUMBER() OVER ( ORDER BY emp_join_date ).这将根据显式排序分配数字.这是一种更清洁的方式.

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

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有