คำสั่ง SQL เพื่อเปรียบเทียบยอดขายสินค้าตามเดือน: คู่มือ

เมื่อพูดถึงการจัดการข้อมูลยอดขายสินค้า การมีความเข้าใจที่ชัดเจนเกี่ยวกับวิธีเปรียบเทียบตัวเลขยอดขายรายเดือนในแต่ละปีนั้นมีความสำคัญอย่างมากต่อการรายงานที่มีประสิทธิภาพ ไม่ว่าคุณจะดำเนินธุรกิจค้าปลีกหรือวิเคราะห์ข้อมูลยอดขายสำหรับองค์กร การระบุแนวโน้มยอดขายได้อย่างรวดเร็วสามารถให้ข้อมูลเชิงลึกที่มีค่า ในโพสต์นี้เราจะสำรวจวิธีสร้างคำสั่ง SQL เพื่อเปรียบเทียบยอดขายสินค้าตามเดือนในสองปีติดต่อกัน พร้อมกับการแสดงเดือนที่มียอดขายเป็นศูนย์อย่างชัดเจน

การทำความเข้าใจกับปัญหา

คุณอาจพบสถานการณ์ที่คุณมีชุดข้อมูลที่จัดโครงสร้างตามนี้:

หมวดหมู่ | รายได้   | ปี   | เดือน
จักรยาน  | 10,000  | 2008 | 1
จักรยาน  | 12,000  | 2008 | 2
จักรยาน  | 12,000  | 2008 | 3
จักรยาน  | 15,000  | 2008 | 4
จักรยาน  | 11,000  | 2007 | 2
จักรยาน  | 11,500  | 2007 | 3
จักรยาน  | 15,400  | 2007 | 4

จากชุดข้อมูลนี้ คุณต้องการสร้างรายงานที่เปรียบเทียบบัญชียอดขายในเดือนมกราคมถึงเดือนธันวาคมสำหรับปี 2007 และ 2008 เป้าหมายคือการเติมเดือนที่ไม่มีการขายด้วย ‘0’ ในทั้งสองคอลัมน์ เพื่อสร้างภาพเปรียบเทียบที่ชัดเจนสำหรับการตัดสินใจ

ผลลัพธ์ที่ต้องการอาจมีลักษณะดังนี้:

หมวดหมู่ | เดือน | รายได้ปีนี้ | รายได้ปีที่แล้ว
จักรยาน  | 1     | 10,000      | 0
จักรยาน  | 2     | 12,000      | 11,000
จักรยาน  | 3     | 12,000      | 11,500
จักรยาน  | 4     | 0           | 15,400

การสร้างคำสั่ง SQL

เพื่อให้บรรลุผลนี้ เราจะใช้คำสั่ง CASE ที่ทรงพลังของ SQL ร่วมกับฟังก์ชั่นการรวมที่เหมาะสม นอกจากนี้เรายังต้องตั้งค่าตารางช่วยที่รวมทุกเดือนที่เราต้องการข้อมูลยอดขาย แม้ว่าจะไม่มีการบันทึกการขายก็ตาม

ขั้นตอนที่ 1: การตั้งค่าตารางของคุณ

คุณควรมีตารางต่อไปนี้เพื่อใช้งาน:

  • ตารางขาย: เก็บข้อมูลเกี่ยวกับหมวดหมู่ รายได้ ปี และเดือน
  • ตารางเวลา (tm): เก็บข้อมูลเกี่ยวกับปีและเดือนทั้งหมดที่คุณต้องการรายงาน

ขั้นตอนที่ 2: โครงสร้างคำสั่งพื้นฐาน

นี่คือคำสั่ง SQL ที่เรียบง่ายเพื่อเรียกยอดขายสินค้าโดยไม่ต้องการแถวว่าง:

SELECT
    หมวดหมู่,
    เดือน,
    SUM(CASE WHEN YEAR = 2008 THEN รายได้ ELSE 0 END) AS รายได้ปีนี้,
    SUM(CASE WHEN YEAR = 2007 THEN รายได้ ELSE 0 END) AS รายได้ปีที่แล้ว
FROM
    ขาย
WHERE
    YEAR IN (2008, 2007)
GROUP BY
    หมวดหมู่,
    เดือน
ORDER BY
    เดือน;

คำอธิบาย:

  • SUM กับ CASE: ฟังก์ชั่นนี้จะรวมรายได้สำหรับแต่ละปีตามเงื่อนไขที่กำหนด – ทำให้คุณสามารถแยกแยะระหว่างสองปีได้
  • การจัดกลุ่ม: ผลลัพธ์จะถูกจัดระเบียบตาม หมวดหมู่ และ เดือน เพื่อความชัดเจน

ขั้นตอนที่ 3: การรวมแถวว่าง

หากคุณต้องการรวมเดือนที่มียอดขายเป็นศูนย์ คำสั่งต้องปรับเพื่อให้ดึงข้อมูลจากทั้ง ขาย และตาราง tm วิธีการคือ:

SELECT
    fill.หมวดหมู่,
    fill.เดือน,
    SUM(CASE WHEN YEAR = 2008 THEN รายได้ ELSE 0 END) AS รายได้ปีนี้,
    SUM(CASE WHEN YEAR = 2007 THEN รายได้ ELSE 0 END) AS รายได้ปีที่แล้ว
FROM
    ขาย
RIGHT JOIN (SELECT DISTINCT หมวดหมู่, Year, เดือน FROM ขาย CROSS JOIN tm) AS fill
ON fill.หมวดหมู่ = ขาย.หมวดหมู่ AND fill.Year IN (2008, 2007)
GROUP BY
    fill.หมวดหมู่,
    fill.เดือน
ORDER BY
    fill.เดือน;

คำอธิบาย:

  • RIGHT JOIN: คำสั่งนี้จะทำให้มั่นใจได้ว่าทุกเดือนจากตาราง tm ถูกใช้รวมถึงเดือนที่ไม่มีข้อมูลการขาย
  • การจัดกลุ่มและการสั่งซื้อ: การจัดกลุ่มและการสั่งซื้อที่เหมือนกันช่วยในการสร้างรายงานที่ชัดเจน

บทสรุป

ด้วยการใช้เทคนิคที่แสดงในบทความนี้ คุณจะสามารถสร้างรายงานที่เปรียบเทียบยอดขายสินค้าแต่ละเดือนในปีต่าง ๆ ได้อย่างมีประสิทธิภาพ แม้ว่าจะมีกรณียอดขายเป็นศูนย์ วิธีการนี้ไม่เพียงแต่ช่วยในการวิเคราะห์ข้อมูลอย่างถ่องแท้ แต่ยังเสริมสร้างความสามารถในการรายงานรวมด้วย

สำหรับการอ่านเพิ่มเติมและฟังก์ชันขั้นสูง ลองตรวจสอบแหล่งข้อมูลเพิ่มเติมเกี่ยวกับการใช้คำสั่ง CASE และ PIVOT ใน SQL Server 2005 สำหรับความต้องการรายงานที่ซับซ้อนยิ่งขึ้น ขอให้คุณสนุกกับการเขียนคำสั่ง SQL!