Home » SQL & PL/SQL » SQL & PL/SQL » Serial Number (Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi)
Serial Number [message #591868] |
Wed, 31 July 2013 23:55  |
mamalik
Messages: 270 Registered: November 2008 Location: Pakistan
|
Senior Member |

|
|
Dear All
I have follwoing Table
create table abc( prd_cod number,tax_num number, tkt_num number,shd_cod number,cnt_num number,ctn_num number);
Insert into ABC(PRD_COD, TAX_NUM, TKT_NUM, SHD_COD, CNT_NUM, CTN_NUM) Values (1, 1, 1, 1, 1, 1);
Insert into ABC(PRD_COD, TAX_NUM, TKT_NUM, SHD_COD, CNT_NUM, CTN_NUM) Values (1, 1, 1, 1, 2, 1);
Insert into ABC(PRD_COD, TAX_NUM, TKT_NUM, SHD_COD, CNT_NUM, CTN_NUM) Values (1, 1, 1, 2, 1, 1);
Insert into ABC(PRD_COD, TAX_NUM, TKT_NUM, SHD_COD, CNT_NUM, CTN_NUM) Values (1, 1, 2, 1, 1, 1);
Insert into ABC(PRD_COD, TAX_NUM, TKT_NUM, SHD_COD, CNT_NUM, CTN_NUM) Values (1, 5, 1, 2, 1, 1);
Insert into ABC(PRD_COD, TAX_NUM, TKT_NUM, SHD_COD, CNT_NUM, CTN_NUM) Values (2, 1, 1, 1, 1, 1);
COMMIT;
Now i have following data
PRD_COD TAX_NUM TKT_NUM SHD_COD CNT_NUM CTN_NUM
1 1 1 1 1 1
1 1 1 1 2 1
1 1 1 2 1 1
1 1 2 1 1 1
1 5 1 2 1 1
2 1 1 1 1 1
I need to query above data with a column "Srl_Num". Its serial number and serial should like 'AA1','AB1'. In serial number is last digit 1 is "Ctn_Num" Column Value. First Letter 'A' of serial number is 'A' and second letter of serial number will change. When it reaches till 'Z' Then first letter will change.I mean if serial number is 'AZ1' Then next serial number will be 'BA1','BB1','BC1' and so on.
I need query to show data like
Srl_Num PRD_COD TAX_NUM TKT_NUM SHD_COD CNT_NUM CTN_NUM
AA1 1 1 1 1 1 1
AB1 1 1 1 1 2 1
AC1 1 1 1 2 1 1
AD1 1 1 2 1 1 1
AE1 1 5 1 2 1 1
AF1 2 1 1 1 1 1
Thanks
|
|
|
Re: Serial Number [message #591870 is a reply to message #591868] |
Thu, 01 August 2013 00:31   |
 |
Michel Cadot
Messages: 68764 Registered: March 2007 Location: Saint-Maur, France, https...
|
Senior Member Account Moderator |
|
|
SQL> with
2 data as (
3 select abc.*,
4 row_number() over (order by null)-1 rn
5 from abc
6 )
7 select chr(ascii('A')+trunc(rn/26))||chr(ascii('A')+mod(rn,26))||ctn_num Srl_Num,
8 data.*
9 from data
10 /
SRL_NUM PRD_COD TAX_NUM TKT_NUM SHD_COD CNT_NUM CTN_NUM RN
---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
AA1 1 1 1 1 1 1 0
AB1 1 1 1 1 2 1 1
AC1 1 1 1 2 1 1 2
AD1 1 1 2 1 1 1 3
AE1 1 5 1 2 1 1 4
AF1 2 1 1 1 1 1 5
Regards
Michel
[Updated on: Thu, 01 August 2013 11:08] Report message to a moderator
|
|
|
|
Re: Serial Number [message #591956 is a reply to message #591950] |
Thu, 01 August 2013 11:17  |
 |
Michel Cadot
Messages: 68764 Registered: March 2007 Location: Saint-Maur, France, https...
|
Senior Member Account Moderator |
|
|
ascii('A') gives the ascii code for A
ascii('A')+0 gives the ascii code for A
chr(ascii('A')+0) gives the character A
ascii('A')+1 gives the ascii code for B
chr(ascii('A')+1) gives the character B
ascii('A')+2 gives the ascii code for C
chr(ascii('A')+2) gives the character C
...
Based on this, execute the following:
with data as (select level rn from dual connect by level <= 100)
select chr(ascii('A')+trunc(rn/26)) "First letter", --> increment after each 26 lines --> trunc
chr(ascii('A')+mod(rn,26)) "Second letter" --> increment at each line, reset when reach 26 -> mod
from data
order by rn
/
results
SQL> break on "First letter" dup skip 1
SQL> with data as (select level rn from dual connect by level <= 100)
2 select chr(ascii('A')+trunc(rn/26)) "First letter", --> increment after each 26 lines --> trunc
3 chr(ascii('A')+mod(rn,26)) "Second letter" --> increment at each line, reset when reach 26 -> mod
4 from data
5 order by rn
6 /
F S
- -
A B
A C
A D
A E
A F
A G
A H
A I
A J
A K
A L
A M
A N
A O
A P
A Q
A R
A S
A T
A U
A V
A W
A X
A Y
A Z
B A
B B
B C
B D
B E
B F
B G
B H
B I
B J
B K
B L
B M
B N
B O
B P
B Q
B R
B S
B T
B U
B V
B W
B X
B Y
B Z
C A
C B
C C
C D
C E
C F
C G
C H
C I
C J
C K
C L
C M
C N
C O
C P
C Q
C R
C S
C T
C U
C V
C W
C X
C Y
C Z
D A
D B
D C
D D
D E
D F
D G
D H
D I
D J
D K
D L
D M
D N
D O
D P
D Q
D R
D S
D T
D U
D V
D W
100 rows selected.
Regards
Michel
|
|
|
Goto Forum:
Current Time: Sat Aug 02 19:56:32 CDT 2025
|