เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การแปลงแถวเป็นคอลัมน์

ในบทเรียนนี้ คุณได้เรียนรู้ว่า PIVOT จะแปลงค่าที่ไม่ซ้ำกันจากคอลัมน์หนึ่งให้กลายเป็นหลายคอลัมน์

เมื่อวิเคราะห์ข้อมูลใน paper_shop_monthly_sales แล้วพบว่าโครงสร้างของตารางนี้ไม่เหมาะสมกับรายงานที่ต้องการสร้าง

รายงานที่ต้องการมีหน้าตาดังนี้:

|year_of_sale|notebooks|pencils|crayons|
|------------|---------|-------|-------|
| 2018       | 150     | 150   | 80    |
| 2019       | 230     | 130   | 170   |

กล่าวคือ ต้องการเปลี่ยนข้อมูลที่อยู่ในแถวให้กลายเป็นคอลัมน์ และรวมจำนวนหน่วยสำหรับแต่ละปี

ตามที่ได้เรียนรู้จากแบบฝึกหัดก่อนหน้า ชื่อสินค้าและจำนวนหน่วยต้องถูกแยกออกจากกัน ซึ่งดำเนินการใน subselect — ลองดูโครงสร้างของมัน

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การทำความสะอาดข้อมูลในฐานข้อมูล SQL Server

ดูคอร์ส

คำแนะนำการฝึกหัด

  • เลือกคอลัมน์ที่ถูก pivot สำหรับสินค้าแต่ละชนิด
  • ระบุการรวมจำนวนหน่วยด้วย SUM() ภายใน operator PIVOT
  • หลังคำสั่ง 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 ___
แก้ไขและรันโค้ด