Transpose ข้อมูล ด้วย Microsoft Access
หากเรามีข้อมูลดังตารางข้างล่างนี้
Employee ID | First Name | Last Name | Address | City | Country |
1 | Nancy | Davolio | 507 - 20th Ave. E. | Seattle | USA |
2 | Andrew | Fuller | 908 W. Capital Way | Tacoma | USA |
3 | Janet | Leverling | 722 Moss Bay Blvd. | Kirkland | USA |
4 | Margaret | Peacock | 4110 Old Redmond Rd. | Redmond | USA |
5 | Steven | Buchanan | 14 Garrett Hill | London | UK |
แต่ต้องการแปลงข้อมูลให้ได้ดังตารางข้างล่างนี้
Employee ID | 1 | 2 | 3 | 4 | 5 |
First Name | Nancy | Andrew | Janet | Margaret | Steven |
Last Name | Davolio | Fuller | Leverling | Peacock | Buchanan |
Address | 507 - 20th Ave. E. | 908 W. Capital Way | 722 Moss Bay Blvd. | 4110 Old Redmond Rd. | 14 Garrett Hill |
City | Seattle | Tacoma | Kirkland | Redmond | London |
Country | USA | USA | USA | USA | UK |
ซึ่งถ้าใน Microsoft Excel เราสามารถ Copy ข้อมูล แล้ว Paste แบบ Transpose ได้
แต่ถ้าเราอยากแปลงรูปแบบดังกล่าวใน Microsoft ACCESS เราสามารถทำได้ด้วยการสร้าง Query ให้มี 3 คอลัมน์ดังนี้
คอลัมน์แรก เป็นข้อมูล EmployeeID
คอลัมน์ที่สอง เป็นข้อมูล ชื่อคอลัมน์ เช่น FirstName,LastNme เป็นต้น
คอลัมน์ที่สาม เป็นข้อมูล ค่าของแต่ละคอลัมน์ เช่น ค่าของ FirstName,ค่าของ LastName เป็นต้น
ซึ่งเราสามารถนำ Query ในรูปแบบดังกล่าวได้โดยเขียน Union Query ดังนี้
SELECT EmployeeID as ColHead, "FirstName" AS [Employee ID], FirstName AS TheVal FROM Employees UNION SELECT EmployeeID , "Last Name",LastName FROM Employees UNION SELECT EmployeeID , "Address" ,Address FROM Employees UNION SELECT EmployeeID , "City" ,City FROM Employees UNION SELECT EmployeeID , "Country" ,Country FROM Employees;จะได้ผลลัพธ์ดังนี้
ColHead | Employee ID | TheVal |
|---|---|---|
1 | Address | 507 - 20th Ave. E. |
1 | City | Seattle |
1 | Country | USA |
1 | FirstName | Nancy |
1 | Last Name | Davolio |
2 | Address | 908 W. Capital Way |
2 | City | Tacoma |
2 | Country | USA |
2 | FirstName | Andrew |
2 | Last Name | Fuller |
3 | Address | 722 Moss Bay Blvd. |
3 | City | Kirkland |
3 | Country | USA |
3 | FirstName | Janet |
3 | Last Name | Leverling |
4 | Address | 4110 Old Redmond Rd. |
4 | City | Redmond |
4 | Country | USA |
4 | FirstName | Margaret |
4 | Last Name | Peacock |
5 | Address | 14 Garrett Hill |
5 | City | London |
5 | Country | UK |
5 | FirstName | Steven |
5 | Last Name | Buchanan |
หลังจากนั้น นำข้อมูลดังกล่าวมาทำ Crosstab Query ซึ่ง Design View ของ Crosstab Query เป็นดังนี้ค่ะ
ผลลัพธ์ที่ได้เป็นดังนี้ค่ะ
Employee ID | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
Address | 507 - 20th Ave. E. | 908 W. Capital Way | 722 Moss Bay Blvd. | 4110 Old Redmond Rd. | 14 Garrett Hill |
City | Seattle | Tacoma | Kirkland | Redmond | London |
Country | USA | USA | USA | USA | UK |
FirstName | Nancy | Andrew | Janet | Margaret | Steven |
Last Name | Davolio | Fuller | Leverling | Peacock | Buchanan |
ซึ่งจะเห็นว่า ผลลัพธ์ที่ได้ จะยังไม่ตรงทั้งหมดตรงที่ ไม่ได้เริ่มต้นตั้งแต่ FirstName
เนื่องจากมีการเรียงลำดับข้อมูลตามตัวอักษร จึงเริ่มต้นที่ Address
ซึ่งการแก้ปัญหานี้ อาจต้องใส่ ตัวเลขนำหน้า ในขั้นตอนการทำ Union Query เช่น
SELECT EmployeeID as ColHead, "1.FirstName" AS [Employee ID], FirstName AS TheVal FROM Employees UNION SELECT EmployeeID , "2.Last Name",LastName FROM Employeesจึงจะได้ลำดับข้อมูลตามที่ต้องการค่ะ
บางท่านอาจจะคิดว่า หากทำเพียงเท่านี้ ไม่น่าจะยุ่งยากมาทำให้ MS Access ก็ได้
แต่อย่าลืมว่าใน MS Access สามารถใส่ค่า Parameter ใน crosstab Query ได้
ซึ่งติดตามได้ในบทความ การใส่ Parameter ใน Crosstab Query ค่ะ
https://www.9experttraining.com/articles/การใส่-parameter-ใน-crosstab-query

