คำสั่ง 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!