สอบถามการ Query Microsoft Access กรณีที่มีช่องว่า
กระทู้เก่าบอร์ด อ.Yeadram

 1,874   12
URL.หัวข้อ / URL
สอบถามการ Query Microsoft Access กรณีที่มีช่องว่า

สวัสดีค่ะ เข้าใช้งานครั้งแรก ถ้าผิดพลาดยังไงต้องขอโทษล่วงหน้านะคะ

ตัวอย่างข้อมูลนะคะ

ชื่อบริษัท                  ชื่อคน
A               กาน
B               ขัน
C               กาน
D               เนศ   
E               เนศ รัตน์
F               เอ
G              บี
H              ศรา รัตน์


อยากจะ Query (หรืออาจมีฟังก์ชั่นอื่น) ให้ออกมาเป็น

ชื่อบริษัท                  ชื่อคน
A               กาน
C               กาน
D               เนศ   
E               เนศ รัตน์
H               ศรา รัตน์


คือ ถ้าส่วนใดส่วนหนึ่งของชื่อคนซ้ำกัน (อาจจะเป็นชื่อเดียวกัน หรือนามสกุลเดียวกัน แบ่งแยกด้วยช่องว่างค่ะ ดึงหมด) แต่อยู่่คนละบริษัท ให้ดึงออกมาค่ะ

ที่ลองไว้คือ
SELECT *
WHERE ชื่อบริษัท <> ชื่อบริษัท and ชื่อคน = ชื่อคน
FROM TABLE;

คือรู้ว่าคิดได้ติงต๊องมากจนเลิกคิดแล้ว รบกวนพี่ ๆ นะคะ T_T

12 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R21745
ถ้าชื่อและนามสกุลเป็นคนละฟิลด์ พอจะทำได้ แต่ถ้าฟิลด์เดียวกัน แล้วทำภายใต้คิวรี่อย่างเดียว ผมว่าไม่น่าทำได้ หรือทำได้ก็จะไม่มีประสิทธิภาพถ้าข้อมูลมีปริมาณมาก
2 @R21748
ถ้าทำเป็นเบื้องต้นแค่กรณีคอลัมน์ ชื่อคน เหมือนกัน แต่บริษัทต่างกันให้จับออกมาได้มั้ยคะ ถ้าบริษัทเหมือนกันไม่ต้องจับ รบกวนด้วยนะคะ
3 @R21749
เปรียบเทียบทั้งชื่อคนและนามสกุล

select T1.* from TABLE as T1 where exists (select T2.ชื่อบริษัท from TABLE as T2 where T2.ชื่อบริษัท <> T1.ชื่อบริษัท and T2.ชื่อคน = T1.ชื่อคน)
4 @R21750
ขอบคุณมาก ๆ นะคะ สอบถามเพิ่มเติมนะคะ ตารางมีตารางเดียวทำไมถึงมี T1 กับ T2 หรือคะ รบกวนด้วยนะคะ
5 @R21751
SQL statement นี้ มีการใช้ sub query (คือคำสั่ง SQL SELECT statement ภายใต้คิวรี่หลักอีกที) ระบบจะดึงข้อมูลจาก main query มาหนึ่งเรคอร์ด แล้วก็ค่อยไปประมวลผลใน sub query เสร็จแล้วถึงกลับมาที่ main query เพื่อดึงเรคอร์ดต่อไป เป็นอย่างนี้จนกว่าจบเงื่อนไข ซึ่งกรณีนี้ ทั้ง main และ sub query อ้างข้อมูลจากเทเบิลเดียวกัน ใน sub query สามารถอ้างฟิลด์ใน main query ได้ ดังนั้นเพื่อให้ sub query แยกแยะได้ว่าฟิลด์ไหนมาจากเทเบิลในส่วนไหน จึงต้องมีการกำหนด Alias name (ชื่อเล่น) ของเทเบิลในแต่ละส่วนเอาไว้โดยการใช้คำว่า as ตามด้วยชื่อเล่น ซึ่งก็คือ T1 และ T2 นั่นเองครับ
6 @R21756
พอดีพยายามทำความเข้าใจ เลยลองทำตามตัวอย่างเพื่อดูผลลัพธ์ แต่พบ Error ตามภาพแนบค่ะ รบกวนด้วยนะคะ T_T

7 @R21757
เทเบิลคุณชื่อ TABLE1 ใช่ไหม แก้ให้ถูกต้องด้วย
8 @R21760
ได้แล้วค่ะ ขอบคุณมาก ๆ นะคะ รบกวนเพิ่มเติมนะคะ
ตอนนี้ทำการแยกชื่อคน ด้วยช่องว่าง ได้แล้ว

ตัวอย่างข้อมูลที่มีในมือตอนนี้นะคะ

จาก

ชื่อบริษัท                  ชื่อคน                 
A               กาน นาน                     
B               ขันทอง             
C               กาน นาน                   
D               เนศ                            
E               เนศ รัตน์                            
F               เอ บี ซี                            
G              บี                                        
H              ศรา รัตน์                            

ทำได้แล้วเป็น

ชื่อบริษัท                  ชื่อคน                    ชื่อคน1                 ชื่อคน2             ชื่อคน3
A               กาน นาน                      กาน                                         นาน
B               ขันทอง                           ขันทอง
C               กาน นาน                        กาน                                           นาน
D               เนศ                                    เนศ
E               เนศ รัตน์                            เนศ                                         รัตน์
F               เอ บี ซี                             เอ                                                บี                                   ซี
G              บี                                         บี
H              ศรา รัตน์                             ศรา                                               รัตน์

เราสามารถทำแบบตัวอย่างที่คุณสันติสุขให้มาด้านบน แต่เป็นค้นหา ชื่อคน 1 ก่อน 1 รอบ (เข้าใจว่าเทียบกับช่องชื่อคน) แล้วมาต่อที่ชื่อคน 2 อีก 1 รอบ (เทียบกับช่องชื่อคน) และมาต่อที่ชื่อคน 3 วนไปเรื่อย ๆ จะได้มั้ยคะ เท่าที่มองจากที่คุณสันติสุขสอน เริ่มมีความหวัง
อยากจะ Query (หรืออาจมีฟังก์ชั่นอื่น) ให้ออกมาเป็น

ชื่อบริษัท                  ชื่อคน              
A               กาน นาน                  
C               กาน นาน                     
D               เนศ                                   
E               เนศ รัตน์                          
F               เอ บี ซี                            
G              บี                                         บี
9 @R21761
ฟิลด์ "ชื่อคน1" เทียบกับ "ชื่อคน1" ด้วยกันสิครับ ไม่ใช่ไปเทียบกับ "ชื่อคน"
10 @R21763
เพราะอยากให้ดึงออกมาถ้า ชื่อคน 1 ชื่อคน 2 ชื่อคน 3 เป็นส่วนใดส่วนนึงของ ชื่อคน ค่ะ ไม่แน่ใจว่าคิดแบบวิธีนี้จะถูกรึเปล่าค่ะ รบกวนด้วยนะคะ
11 @R21767
ผมว่าไม่น่าจะถูกนะครับ ถ้าความต้องการคือเทียบชื่อกับชื่อ และนามสกุลกับนามสกุล แต่ต่างบริษัทกัน ก็ควรเป็นอย่างที่ผมว่าไว้ ไม่ก็ลองยกตัวอย่างข้อมูลที่คุณคิดว่าถ้าเทียบกันแล้วจะให้ผลลัพธ์ตามต้องมามาหน่อยครับ
12 @R21770
มาอ่านใหม่ เลยไม่ค่อยแน่ใจความต้องการ ถ้าเทียบกับ **ส่วนหนึ่งส่วนใด** ของ "ชื่อคน" ก็ให้ใช้ Like operator แทนได้ครับ

select T1.* from TABLE as T1 where exists (select T2.ชื่อบริษัท from TABLE as T2 where (T2.ชื่อบริษัท <> T1.ชื่อบริษัท) and ((T2.ชื่อคน1 Like "*"+T1.ชื่อคน+"*") or (T2.ชื่อคน2 Like "*"+T1.ชื่อคน+"*") or (T2.ชื่อคน3 Like "*"+T1.ชื่อคน+"*")))
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2232s