รีเคอร์ซีฟแบบไฮราคี


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

รีเคอร์ซีฟแบบไฮราคี

 

อย่างที่เรียนไปแล้วตอนต้นว่ารีเคอร์ซีฟเหมาะใช้เข้าถึงข้อมูลที่ลดหลั่นเป็นลำดับชั้นหรือไฮราคี (Hierarchy) ดังนั้นในหัวข้อนี้ผู้เขียนจะเสนอตัวอย่างคิวรีที่มีการทำงานเช่นนั้นบ้าง ในภาพ 17-16 เป็นคิวรีแสดงลำดับชั้นสายการบังคับบัญชาของพนักงานในบริษัท ผลลัพธ์จะเป็นอย่างที่เห็นในกรอบ Results โปรดสังเกตว่าข้อมูลแถวแรกคือพนักงานรหัส 109 ชื่อ Ken กินตำแหน่ง CEO คืออยู่สูงที่สุดในลำดับชั้นของสายการบังคับบัญชา คอลัมน์ Level1 จึงเป็น 1 ส่วนคอลัมน์ Hierarchical จะมีชื่อคนผู้นี้เพียงชื่อเดียว

แถวถัดมาพนักงานรหัส 273 ชื่อ Brian ดำรงตำแหน่งรองประธานฝ่ายขาย มีฐานะต่ำกว่า CEO อยู่เพียงลำดับเดียว ค่าในคอลัมน์ Level1 จึงเป็น 2 และผู้เขียนกำหนดให้ใส่เครื่องหมายบวก ( + ) ไว้หน้าชื่อ เครื่องหมายบวกนี้ผู้เขียนกำหนดในคิวรีว่าจะใส่เท่าจำนวนลำดับชั้น ส่วนคอลัมน์ Hierarchical มีชื่อคนอยู่สองชื่อคือ Ken แลชื่อคนผู้นี้

ไหนๆ ก็ดูตัวอย่างผลลัพธ์มาแล้วถึงสองแถว ลองมาดูกันอีกสักแถวจะเป็นไรไป แต่ไม่ดูแถวที่สาม ให้ข้ามไปดูแถวที่สี่ซึ่งเป็นพนักงานรหัส 285 ชื่อ Jae ตำแหน่งพนังงานขาย คนผู้นี้มีผู้บังคับบัญชาเหนือขึ้นไปถึงสามระดับ ค่าในคอลัมน์ Level1 จึงเป็น 4 และมีเครื่องหมายบวก + นำหน้าชื่ออยู่สามอัน ส่วนคอลัมน์ Hierarchical มีชื่อคนอยู่สี่ชื่อคือ Ken, Brian, Amy และชื่อคนผู้นี้

ภาพ 17-16: คิวรีแสดงลำดับชั้นสายการบังคับบัญชาของพนักงานในบริษัท

 

คิวรีในภาพ 17-16 ยืดยาวถึง 43 บรรทัด แต่ท่านไม่ควรระย่อและท้อหนี เพราะโค้ดนี้สักแต่ว่ายาว ไม่มีหลักการอะไรซับซ้อน ใช้เพียงเทคนิคง่ายๆ เหมือนคิวรีในหัวข้อ 17.3.4 บรรทัดที่ 9 ถึง 20 คือคิวรี AM บรรทัดที่ 22 ถึง 36 คือคิวรี RM สองคิวรีนี้ถูกนำมายูเนียนกัน ได้ผลลัพธ์เป็น CTE ชื่อ DirectReport

โค้ดบรรทัดที่ 3-7 ประกาศส่วนหัวของ CTE ทั้งคอลัมน์ Name และ Hierarchical ต่างทำหน้าที่เป็นสตริงเก็บชื่อพนักงานที่นำมาจากตาราง Contact เมื่อรีเคอร์ซีฟทำงานแต่ละรอบ สตริงนี้จะถูกเพิ่มตัว + หรือชื่อพนักงานเข้าไป โดยโค้ดใน AM บรรทัดที่ 10,11 และ 15,16 และโค้ดใน RM บรรทัดที่ 23,24 และ 29,30 ตามลำดับ

คอลัมน์ Title และ ID เป็นคอลัมน์ที่ได้ข้อมูลจากตาราง Employee ส่วน Level1 ทำหน้าที่เป็นตัวนับรอบการรีเคอร์ซีฟ โดยใน AM จะเป็น 1 เสมอเพื่อให้เป็นค่าเริ่มต้น ส่วนใน RM คอลัมน์นี้จะเพิ่มค่าขึ้นเรื่อยจนถึงลำดับการบังคับบัญชาของพนักงานผู้นั้น

โฆษณา

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google photo

You are commenting using your Google account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: