คำสั่ง Update โดยใช้ข้อมูลจากอีกตาราง [Oracle]

ในการสั่ง update ข้อมูล ในบางครั้งเราอาจจะเจอโจทย์ว่า ต้องการ update ข้อมูลในตารางหนึ่งโดยใช้ข้อมูลจากอีกตารางหนึ่ง ซึ่งลักษณะของข้อมูลทั้งสองตารางนี้ จะต้องมีฟีลด์ข้อมูลที่สามารถเชื่อมโยงความสัมพันธ์ของข้อมูลแต่ละเร็คคอร์ดได้ ตัวอย่างข้อมูล มีข้อมูลสองตาราง ตารางที่ 1 เก็บข้อมูลวันในหนึ่งสัปดาห์ภาษาไทย [ชื่อตาราง : DAY_OF_WEEK_THAI] โครงสร้างตารางประกอบด้วย ฟีลด์ ID เก็บ ID ของแต่ละเร็คคอร์ด ฟีลด์ DAY_FULL เก็บข้อมูลวันแบบเต็มภาษาไทย ฟีดล์ DAY_SHORT เก็บข้อมูลวันแบบย่อภาษาไทย ข้อมูลในตารางเป็นดังนี้ ตารางที่ 2 เก็บข้อมูลวันในหนึ่งสัปดาห์ภาษาอังกฤษ [ชื่อตาราง : DAY_OF_WEEK] โครงสร้างตารางประกอบด้วย ฟีลด์ ID เก็บ ID ของแต่ละเร็คคอร์ด ฟีลด์ DAY_ENG เก็บข้อมูลวันแบบเต็มภาษาอังกฤษ ฟีดล์ DAY_ENG_SHORT เก็บข้อมูลวันแบบย่อภาษาอังกฤษ ข้อมูลในตารางเป็นดังนี้ 2. ฟีลด์ที่เชื่อมโยงความสัมพันธ์ของทั้งสองตารางคือฟีลด์ ID 3. ต่อมามีการปรับแก้โครงสร้างตาราง DAY_OF_WEEK โดยเพิ่มฟีลด์ 2 ฟีลด์ ดังนี้ ฟีลด์ DAY_THA สำหรับเก็บข้อมูลวันแบบเต็มภาษาไทย ฟีลด์ DAY_THA_SHORT สำหรับเก็บข้อมูลวันแบบย่อภาษาไทย 4. เนื่องจากมีข้อมูลวันภาษาไทยในตาราง DAY_OF_WEEK_THAI อยู่แล้ว และสามารถเชื่อมโยงข้อมูลกันได้ด้วยฟีลด์ ID ดังนั้นความต้องการคือ การใช้ข้อมูลจากตาราง DAY_OF_WEEK_THAI มา update ให้กับตาราง DAY_OF_WEEK 5. รายละเอียดการ update นำข้อมูลวันแบบเต็มภาษาไทยในฟีลด์ DAY_FULL ของตาราง DAY_OF_WEEK_THAI มาใส่ในฟีลด์ DAY_THA ของตาราง DAY_OF_WEEK นำข้อมูลวันแบบย่อภาษาไทยในฟีลด์ DAY_SHORT ของตาราง DAY_OF_WEEK_THAI มาใส่ในฟีลด์ DAY_THA_SHORT ของตาราง DAY_OF_WEEK รูปแบบคำสั่ง SQL แบบที่ 1 update table1 t1 set table1.data1= (select table2.data1 from table2 where table2.key = t1.key), table1.data2 = (select table2.data2 from table2 where table2.key = t1.key); แบบที่ 2 update table1 t1 set (table1.data1, table1.data2) = (select table2.data1, table2.data2 from table2 where table2.key = t1.key); อธิบายคำสั่ง table1 คือ ตารางที่ต้องการ update t1 คือ ชื่ออ้างอิงแทนตาราง table1 ซึ่ง t1 จะถูกใช้ในคำสั่ง select table1.data1 และ table1.data2 คือ ฟีลด์ข้อมูลที่ต้องการ update table2 คือ ตารางที่จะนำข้อมูลมาใช้เพื่อ update ให้กับ table1 table2.data1 และ table2.data2 คือ ฟีลด์ข้อมูลที่จะนำมาใช้เพื่อ update ให้กับ table1.data1 และ table1.data2 ตามลำดับ ตัวอย่างการนำไปใช้งาน แบบที่ 1 update day_of_week t1 set day_tha = (select day_full from day_of_week_thai where day_of_week_thai.id = t1.id), day_tha_short = (select day_short from

Read More »

การสลับข้อมูลจาก Column เป็น Row ใน Excel

ท่านผู้อ่านที่ใช้งาน Excel น่าจะเคยเจอปัญหาหรือมีความต้องการที่ว่า มีข้อมูลที่มีลักษณะเป็น Column แต่ต้องการย้ายให้มาแสดงในรูปแบบ Row ถ้าต้อง copy แล้วมา paste ทีละตัวคงไม่สะดวกอย่างแน่นอน แต่ Excel ได้จัดเตรียมเครื่องมือสำหรับแก้ปัญหาเหล่านี้เอาไว้แล้ว ลองไปดูกันเลย 1.สมมติเรามีข้อมูลชื่อเดือนเก็บอยู่ในเ Excel ในคอลัมน์เดียวกันเรียงกันลงมาดังรูป 2. เลือกข้อมูลที่ต้องการย้ายทั้งหมดแล้ว copy เก็บไว้ 3. ไปยัง sheet หรือ cell ที่ต้องการ จากนั้นคลิกขวา ใต้เมนู Paste Options เลือกไอคอนที่ 4 (Transpose) 4. ก็จะได้ข้อมูลมาอยู่ในรูปแบบแนวนอน ดังรูป 5. จากข้อ 2 ถ้าเราเลือกเมนู Paste Special… จะปรากฏ dialog ดังรูป ให้เลือก Transpose จากกดปุ่ม OK เพื่อยืนยัน ก็จะได้ผลลัพธ์เหมือนกัน นอกจากนี้ เรายังสามารถใช้ฟังก์ชัน TEXTJOIN() โดยฟังก์ชันนี้จะทำหน้าที่รวมข้อความจากช่วงข้อมูลหรือข้อความหลายๆ ส่วนเข้าด้วยกันและสามารถระบุตัวคั่นระหว่างข้อมูลได้ด้วย โดยฟังก์ชันนี้จะมี parameter สามส่วนหลักๆ คือ พารามิเตอร์ คำอธิบาย ตัวคั่น สตริงข้อความไม่ว่าจะเป็นสตริงข้อความว่าง, ประกอบอักขระอย่างน้อย 1 ตัวในอัญประกาศ หรือมีการอ้างอิงไปยังสตริงข้อความที่ถูกต้อง ถ้ามีตัวเลขอยู่ก็ถือว่าเป็นข้อความ ignore_empty ถ้าเป็นค่า TRUE ให้ละเว้นเซลล์ว่าง text1 รายการข้อความที่จะถูกรวมเข้าด้วยกัน สตริงข้อความ หรืออาร์เรย์ของสตริง เช่น ช่วงเซลล์ [text2, …] รายการข้อความเพิ่มเติมที่จะถูกรวมเข้าด้วยกัน สามารถมีอาร์กิวเมนต์ข้อความสำหรับรายการข้อความได้สูงสุด 252 รายการ รวมถึง text1 แต่ละรายการสามารถเป็นสตริงข้อความหรืออาเรย์ของสตริงได้ เช่น ช่วงเซลล์ ตัวอย่างการใช้งานดังรูป จะเห็นว่าถ้าเป็นวิธีใช้ฟังก์ชัน TEXTJOIN ข้อมูลจะถูกนำมารวมในฟิลด์เดียวกัน ซึ่งก็ขึ้นอยู่กับการเลือกนำไปประยุกต์ใช้ ว่าวิธีการไหนจะเหมาะกับงานตัวเอง ก่อนจะจากไป ขอแถมอีกวิธีบน MS Word เผื่อใครอยากทำอะไรคล้ายๆ แบบนี้ วิธีการคือ 1. ข้อมูลแยกกันอยู่คนละบรรทัด ดังตัวอย่าง 2. เลือกข้อมูลทั้งหมด จากนั้นกด Ctrl + H จะปรากฏ dialog “Find and Replace” ดังรูป 3. ป้อน ^p ในช่อง Find what: และป้อน , ลงในช่อง Replace with: จากนั้นกด Replace All ข้อมูลทั้งหมดจะถูกยุบมาอยู่ในบรรทัดเดียวกัน โดยมี , คั่นอยู่ระหว่างข้อมูลแต่ละบรรทัด ดังรูป ซึ่งเทคนิคนี้ก็คือการแทนที่อักขระขึ้นบรรทัดใหม่ ด้วย , นั่นเอง ก็หวังเป็นอย่างยิ่งว่าบทความนี้น่าจะมีประโยชน์ต่อผู้อ่านไม่มากก็น้อย จนกว่าจะพบกันใหม่ สวัสดีครับ อ้างอิง • https://superuser.com/questions/240858/convert-a-column-into-a-comma-separated-list• http://www.saranitus.com/2018/10/ย้ายข้อมูลจาก-row-เป็น-column-ใน-excel-2016.html• https://www.it-guides.com/training-a-tutorial/office-tutorial/transpose-microsoft-excel-2007• https://support.microsoft.com/th-th/office/textjoin-ฟังก์ชัน-textjoin-357b449a-ec91-49d0-80c3-0e8fc845691c

Read More »