Transpose ข้อมูล ด้วย Microsoft Access

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. 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