PlusMagi's Blog By Pitt Phunsanit Database Open XML SDK: ตารางสลับสี

Open XML SDK: ตารางสลับสี

ในโลกของการพัฒนาซอฟต์แวร์ การแสดงผลข้อมูลในรูปแบบตารางที่อ่านง่ายและเป็นระเบียบถือเป็นสิ่งสำคัญอย่างยิ่ง การใช้เทคนิคแถวสลับสี (Alternating Row or Zebra Striping) เป็นวิธีมาตรฐานที่ช่วยให้ผู้ใช้งานสามารถติดตามข้อมูลในแต่ละแถวได้อย่างง่ายดาย ซึ่งในบริบทของ PostgreSQL เราไม่สามารถกำหนดสีโดยตรงในภาษา SQL ได้ แต่เราสามารถใช้ฟังก์ชันขั้นสูงอย่าง Window Functions และ Common Table Expressions (CTE) เพื่อสร้างคอลัมน์ที่ระบุรูปแบบ (Pattern) ของแถวนั้นๆ ได้อย่างมีประสิทธิภาพ

หลักการทำงาน: การจำลองแถวสลับสีใน PostgreSQL

แนวคิดหลักในการสร้างแถวสลับสีใน PostgreSQL คือการใช้ฟังก์ชัน ROW_NUMBER() ร่วมกับการคำนวณค่า Modulo (%) เพื่อตรวจสอบว่าแถวปัจจุบันเป็นลำดับที่คี่หรือคู่ เมื่อทราบสถานะของแถวแล้ว เราจะใช้คำสั่ง CASE WHEN เพื่อกำหนดค่าหรือคลาสที่บ่งบอกถึงรูปแบบสีที่ต้องการ

เราจะใช้ CTE เพื่อจำลองชุดข้อมูลตัวอย่างก่อน จากนั้นจึงใช้ ROW_NUMBER() OVER (ORDER BY column) เพื่อกำหนดลำดับของทุกแถว จากนั้นจึงนำลำดับที่ได้มาตรวจสอบด้วย % 2:

SQL

-- 1. สร้าง CTE เพื่อจำลองชุดข้อมูลตัวอย่าง (Data Source) <code>
WITH data_source AS (
    SELECT 'Apple' AS product_name, 100 AS sales_qty
    UNION ALL SELECT 'Banana', 250
    UNION ALL SELECT 'Orange', 150
    UNION ALL SELECT 'Grape', 300
    UNION ALL SELECT 'Kiwi', 200
)
-- 2. ใช้ Window Function และ CASE WHEN เพื่อกำหนดรูปแบบแถว
SELECT
    product_name,
    sales_qty,
    CASE
        -- ตรวจสอบว่าลำดับเป็นคี่ (Odd) หรือไม่ (1, 3, 5, ...)
        WHEN ROW_NUMBER() OVER (ORDER BY product_name) % 2 = 1 THEN 'Background Color A (Odd)'
        -- ถ้าไม่เป็นคี่ (คือคู่) จะได้รูปแบบ B
        ELSE 'Background Color B (Even)'
    END AS row_style
FROM data_source
ORDER BY product_name;

คำอธิบายโค้ดและหลักการทางสถาปัตยกรรม

ในโค้ดตัวอย่างนี้ ROW_NUMBER() OVER (ORDER BY product_name) จะทำหน้าที่กำหนดลำดับ 1, 2, 3, 4, 5 ให้กับทุกแถวตามลำดับที่กำหนดไว้ (ORDER BY) จากนั้นการใช้ % 2 = 1 จะเป็นการตรวจสอบว่าลำดับนั้นหารด้วย 2 แล้วเหลือเศษ 1 หรือไม่ ซึ่งหมายถึงว่าเป็นแถวคี่ (Odd) หากเป็นคี่ก็จะกำหนดค่าเป็น ‘Background Color A’ และหากเหลือเศษ 0 (แถวคู่) ก็จะกำหนดค่าเป็น ‘Background Color B’

ในมุมมองของ Senior Architect การใช้เทคนิคนี้แสดงให้เห็นถึงความสามารถในการจัดการข้อมูลเชิงโครงสร้าง (Structured Data Manipulation) โดยไม่จำเป็นต้องพึ่งพาการแสดงผลภายนอก (Client-side styling) แต่ใช้พลังของฐานข้อมูลในการจัดระเบียบข้อมูลให้พร้อมสำหรับการนำไปประมวลผลต่อ (Data Preparation) ซึ่งเป็นหลักการสำคัญในการออกแบบระบบที่แข็งแกร่งและมีประสิทธิภาพสูง

บทสรุป

การสร้างแถวสลับสีใน PostgreSQL ด้วย Window Functions เป็นการสาธิตการใช้ความสามารถขั้นสูงของภาษา SQL เพื่อเพิ่มมิติในการอ่านข้อมูล แม้ว่าผลลัพธ์ที่ได้จะเป็นเพียงสตริงที่บ่งบอกรูปแบบ แต่ในทางปฏิบัติแล้ว นักพัฒนาสามารถนำคอลัมน์ row_style นี้ไปใช้ในส่วนของการประมวลผลในแอปพลิเคชัน (เช่น การทำ Conditional Formatting ใน BI Tools หรือการกำหนด CSS Class ใน Backend) เพื่อให้ได้ผลลัพธ์การแสดงผลที่สมบูรณ์แบบตามที่ต้องการ

Exit mobile version