Transpose ข้อมูล ด้วย Microsoft Access
หากเรามีข้อมูลดังตารางข้างล่างนี้
| Employee ID | First Name | Last Name | Address | City | Country |
| 1 | Nancy | Davolio | 507 - 20th Ave. E. Apt. 2A | 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. Apt. 2A | 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. Apt. 2A |
| 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. Apt. 2A | 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