รวม DB2 SQL Technique
- ตรวจค่าเป็น Null
- เลือกแสดงข้อมูลชุดแรก เช่น 10 แถวแรก
- เพิ่ม col. RunNo หรือ Sequence
- อ่าน BOM File
- iSeries Navigator : เรียกใช้ CL command
ตรวจค่าเป็น Null
ปรกติใช้ ตรวจหลัง Join (ไม่พบ จะได้ค่า Null)ซึ่งมักจะพบกับการใช้ LEFT JOIN (ไม่ใช่ LEFT INNER JOIN)
กรองค่าด้วย
WHERE field1 IS NULL
WHERE NOT field1 IS NULL
ตรวจสอบค่า เขียนได้หลายแบบ
IFNULL(field1,0) as field1
ถ้าเปลี่ยนเป็น T-SQL ใช้ Coalesce(field1,0) as field1
หรือ เขียนแบบ"ยาว"
CASE WHEN field1 IS NULL THEN 0 ELSE field1 END AS field1
เลือกแสดงข้อมูลชุดแรก เช่น 10 แถวแรก
SELECT field1,field2 FROM lib.file FETCH FIRST 10 ROWS ONLYเพิ่ม col. RunNo หรือ Sequence
SELECT field1,field2 ,ROW_NUMBER() OVER () as Seq FROM lib.file ORDER BY field1field1 field2
A aaa
B bbb
C ccc
D ddd
E eee
เลือกแสดงข้อมูลชุดแรก เช่น 10 แถวแรก
SELECT field1,field2 FROM lib.file FETCH FIRST 10 ROWS ONLY
หรือ
SELECT * FROM
(SELECT field1,field2 ,ROW_NUMBER() OVER () as Seq FROM lib.file ORDER BY field1
) as F1
WHERE Seq < 10
seq field1 field2
1 A aaa
2 B bbb
3 C ccc
4 D ddd
5 E eee
เลือกแสดง 10 ตัวถัดไป (Top 10)(SELECT field1,field2 ,ROW_NUMBER() OVER () as Seq FROM lib.file ORDER BY field1
) as F1
WHERE Seq < 10
seq field1 field2
1 A aaa
2 B bbb
3 C ccc
4 D ddd
5 E eee
SELECT * FROM
(SELECT field1,field2 ,ROW_NUMBER() OVER () as Seq FROM lib.file ORDER BY field1
) as F1
WHERE Seq > 10
อ่าน BOM File
BOM ปรกติต้องสร้าง File/Field ในลักษณะนี้Parent Child
A a1
A b1
A c1
A d1
a1 a21
a1 a22
c1 c21
c1 c22
c21 d1 (ใช้ d1 ซ้ำ)
BOM File จะต้องแสดงผลอย่างน้อย 2 แบบได้
#1 แสดงโครงสร้าง
lvl-0 lvl-1 lvl-2 lvl-3
A a1 a21
a22
b1
c1 c21 d1
c22
d1
SQL ธรรมดา จะไม่สามารถ แสดงแบบข้างต้นได้
#2 แสดง การใช้วัตถุดิบ รวม (ข้อมูล Node สุดท้าย ของแต่ละโครงสร้าง)
lvl-0 รวมวัตถุดิบ
A a21
a22
b1
d1 (รวม 2 ตัว)
c22
SQL ธรรมดา จะไม่สามารถ แสดงผลได้
ตย. การสร้างให้ผลลัพธ์ ของสินค้า "A" พร้อมที่จะนำไปใช้กับ #1
WITH RPL(level, fParent, fChild, Path) AS
( SELECT 1, fParent ,fChild ,TRIM(fParnet) || '\ ' || xChild as Path
FROM lib.file AS root
WHERE fParent='A'
UNION ALL
( SELECT xParent.level+1, xChild.fParent, xChild.fChild
, Trim(xParent.Path) || '\ ' || xChild.fChild as Path
FROM RPL as xParent
INNER JOIN
(SELECT fParent, fChild FROM lib.file
WHERE fParent <> 'A'
) xChild
ON xParent.fChild = xChild.fParent
)
)
SELECT fParent, level, fChild ,Path FROM RPL ORDER By Path;
ผลลัพธ์
Parent Level Child Path
A 1 a1 A\a1
a1 2 a21 A\a1\a21
a21 3 a22 A\a1\a21\a22
A 1 b1 A\b1
A 1 c1 A\c1
c1 2 c21 A\c1\c21
c21 3 d1 A\c1\c21\d1
c1 2 c22 A\c1\c22
A 1 d1 A\d1
- ใช้ เทคนิค กำหนดตัวแปร WITH
RPL( .. , .. ,.. ) ตัวแปร ชนิด data set (ไม่ใช่ ค่า)
- ใช้ เทคนิค Recursive (เรียกตัวมันเอง) RPL ถูกเรียกใช้ในตัวมันเอง
มี 2 ชุด
- ตัวแรก เฉพาะ Main Root ออกมา ต้องระบุ ค่าที่จะค้น
- ตัวที่ 2 จะเรียกใช้ "ตัวมันเอง"
- Path ช่วยในการเรียง และเห็นภาพ
iSeries Navigator : เรียกใช้ CL command
เทคนิคนี้ Developer ที่ทำหน้าที่ Admin ด้วย จะใช้งานบ่อยครับสั่ง CL Cmd แล้วให้แสดงผลลัพธ์เป็น file แล้วนำมา process ต่อ
ตย. ต้องการดู file 10 ตัวแรกใน Lib = Sarayut