การแปลงแถวเป็นคอลัมน์
ในบทเรียนนี้ คุณได้เรียนรู้ว่า PIVOT จะแปลงค่าที่ไม่ซ้ำกันจากคอลัมน์หนึ่งให้กลายเป็นหลายคอลัมน์
เมื่อวิเคราะห์ข้อมูลใน paper_shop_monthly_sales แล้วพบว่าโครงสร้างของตารางนี้ไม่เหมาะสมกับรายงานที่ต้องการสร้าง
รายงานที่ต้องการมีหน้าตาดังนี้:
|year_of_sale|notebooks|pencils|crayons|
|------------|---------|-------|-------|
| 2018 | 150 | 150 | 80 |
| 2019 | 230 | 130 | 170 |
กล่าวคือ ต้องการเปลี่ยนข้อมูลที่อยู่ในแถวให้กลายเป็นคอลัมน์ และรวมจำนวนหน่วยสำหรับแต่ละปี
ตามที่ได้เรียนรู้จากแบบฝึกหัดก่อนหน้า ชื่อสินค้าและจำนวนหน่วยต้องถูกแยกออกจากกัน ซึ่งดำเนินการใน subselect — ลองดูโครงสร้างของมัน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การทำความสะอาดข้อมูลในฐานข้อมูล SQL Server
คำแนะนำการฝึกหัด
- เลือกคอลัมน์ที่ถูก pivot สำหรับสินค้าแต่ละชนิด
- ระบุการรวมจำนวนหน่วยด้วย
SUM()ภายใน operatorPIVOT - หลังคำสั่ง
FORให้ระบุชื่อคอลัมน์ที่มีค่าซึ่งจะกลายเป็น header ของคอลัมน์ - ตั้งชื่อ operator
PIVOTว่าpaper_shop_pivot
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
SELECT
year_of_sale,
-- Select the pivoted columns
___,
___,
___
FROM
(SELECT
SUBSTRING(product_name_units, 1, charindex('-', product_name_units)-1) product_name,
CAST(SUBSTRING(product_name_units, charindex('-', product_name_units)+1, len(product_name_units)) AS INT) units,
year_of_sale
FROM paper_shop_monthly_sales) sales
-- Sum the units for column that contains the values that will be column headers
PIVOT (SUM(___) FOR ___ IN (notebooks, pencils, crayons))
-- Give the alias name
AS ___