หน้าเว็บ

วันพฤหัสบดีที่ 14 พฤศจิกายน พ.ศ. 2556

คำสั่ง SQL row_number() over (partition by) : oracle

เอาไว้ "แสดงลำดับ row" ของข้อมูลบางส่วน (partition) ตามเงื่อนไขที่ต้องการ เช่น
แสดงลำดับ row ของ drg_code (drg_sequence) โดยจัดเรียงตาม (หรือสัมพันธ์กับ) departmet_id

table drug_code
id
drg_code
department_id
1
0892
1
2
0694
1
3
0782
2
4
0321
1
5
0120
1
6
1001
1
7
0985
2
8
0325
2
9
0695
3
10
0127
4
11
0364
4
12
0697
5
13
0247
1
14
0324
1
15
0364
2
select id,
       drg_code,
       department_id,
       row_number() over (partition by drg_code order by department_id, drg_code) drg_sequence

from drug_code 

จาก table ข้างล่าง จะเห็นว่าเป็นการแสดงลำดับ (drg_sequence) ของ drg_code ซึ่งสัมพันธ์กับ department_id
จะนับ (drg_sequence) 1 2 3 ... ไปเรื่อยๆ  จนหมด drg_code ที่สัมพันธ์กับ department_id นั้น
แล้วก็ขึ้น (drg_sequence) 1 2 3 ... ใหม่สำหรับ drg_code ที่สัมพันธ์กับ department_id ใหม่
เป็นแบบนี้ไปเรื่อยๆ

id
drg_code
department_id
drg_sequence
1
0120
1
1
2
0247
1
2
3
0321
1
3
4
0324
1
4
5
0694
1
5
6
0892
1
6
7
1001
1
7
8
0325
2
1
9
0364
2
2
10
0782
2
3
11
0985
2
4
12
0695
3
1
13
0127
4
1
14
0364
4
2
15
0697
5
1

1 ความคิดเห็น: