oracle 相邻行某两字段相同的行生成同一个单号

Miracle_lucy 2016-08-12 05:16:43
oracle 相邻行某两字段相同的行生成同一个单号

如下图为公司和日期都相同的相邻行,生成一个单号,单号最好用日期组成201411001,201411002,201411003

求sql脚本
...全文
342 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
桃花岛黄岛主 2016-08-12
  • 打赏
  • 举报
回复
引用 1 楼 wang123kui 的回复:

with t as (
select 'aaaaa' a, 1 b from dual union all
select 'aaaaa' a, 1 b from dual union all
select 'aaaaa' a, 2 b from dual union all
select 'aaaaa' a, 2 b from dual union all
select 'bbbbb' a, 1 b from dual union all
select 'bbbbb' a, 2 b from dual union all
select 'bbbbb' a, 1 b from dual union all
select 'ccccc' a, 2 b from dual union all
select 'ccccc' a, 2 b from dual union all
select 'd' a, 2 b from dual
) 
,
t1 as(
select 
rank() over (order by a ) pid1,
rank() over (partition by a order by b ) pid,
t.* from t)

select to_char(sysdate,'yyyymmdd')||lpad(pid1,3,'0')||lpad(pid,3,'0') pid,
a,
b
 from t1

试试看
用dense_rank可能会更好点
js14982 2016-08-12
  • 打赏
  • 举报
回复
需要用到序列么? 一般单号都用序列来增长。 update test a set id=to_char(rq,'yyyymm')||lpad(nextval.suq_name,3,0) where (com,rq)=(select com,rq from test where com=a.com and rq=a.rq); 大概是这么个逻辑吧
chengccy 2016-08-12
  • 打赏
  • 举报
回复
with tmp as (select 'A' as dept , date '2014-11-25' as t_date from dual union all select 'A' as dept , date '2014-11-25' as t_date from dual union all select 'A' as dept , date '2014-11-25' as t_date from dual union all select 'A' as dept , date '2014-11-13' as t_date from dual union all select 'A' as dept , date '2014-11-13' as t_date from dual union all select 'A' as dept , date '2014-11-13' as t_date from dual union all select 'B' as dept , date '2014-11-13' as t_date from dual union all select 'B' as dept , date '2014-11-13' as t_date from dual union all select 'B' as dept , date '2014-11-13' as t_date from dual) SELECT DEPT, T_DATE, TO_CHAR(T_DATE, 'YYYYMM') || LPAD(SUM(RN) OVER(ORDER BY ROWNUM), 3, '0') AS "单号" FROM (SELECT DEPT, T_DATE, CASE WHEN LAG(DEPT) OVER(ORDER BY ROWNUM) = DEPT AND LAG(T_DATE) OVER(ORDER BY ROWNUM) = T_DATE THEN 0 ELSE 1 END RN FROM TMP T) 需要排序的话,把rownum 改成排序字段
桃花岛黄岛主 2016-08-12
  • 打赏
  • 举报
回复

with t as (
select 'aaaaa' a, 1 b from dual union all
select 'aaaaa' a, 1 b from dual union all
select 'aaaaa' a, 2 b from dual union all
select 'aaaaa' a, 2 b from dual union all
select 'bbbbb' a, 1 b from dual union all
select 'bbbbb' a, 2 b from dual union all
select 'bbbbb' a, 1 b from dual union all
select 'ccccc' a, 2 b from dual union all
select 'ccccc' a, 2 b from dual union all
select 'd' a, 2 b from dual
) 
,
t1 as(
select 
rank() over (order by a ) pid1,
rank() over (partition by a order by b ) pid,
t.* from t)

select to_char(sysdate,'yyyymmdd')||lpad(pid1,3,'0')||lpad(pid,3,'0') pid,
a,
b
 from t1

试试看
  数据库操作是软件业人员必备的技能,这门视频教学课程主要是针对从事软件技术的新人的,适合在校大学生、准备转到IT业的新人、软件公司新入职员工。这门课程主要涉及Oracle数据库的基础操作和SQL语法,因为绝大部分软件技术人员掌握这些就可以了,数据库的大部分功能,我们平时是用不到的,所以不用花太多时间去研究。把这门课程里面的内容学会,足以胜任日常性数据库相关的工作。  这门视频教学课程不是针对DBA的培训课程,从事DBA工作的人在软件业人员的占比不高,就业面不太广,有做DBA志向的同学可以到专门的培训机构学习Oracle的OCA、OCP、OCM课程,他们有针对应试的培训内容,他们也可以安排相应的考试,考试通过后会有相应的证书,这门课程更偏向编程应用,不是面向Oracle认证考试的。   我对Oracle数据库有十几年的使用经验,我们公司的数据库是Oracle数据库,基本上每天的编程工作都要写SQL语句,公司的历史数据比较多,需要通过编写SQL语句来进查询处理,有年时间,我的工作就是编写Oracle数据库的存储过程。  这个视频教学课程使用Oracle 19c版本的数据库进讲解。每节课程都结合工作实际,都是干货,都经过认真准备,相信可以给大家带来很大帮助。

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧