อยากได้ function การแยกคำ
กระทู้เก่าบอร์ด อ.Yeadram

 1,643   10
URL.หัวข้อ / URL
อยากได้ function การแยกคำ

ผมมีข้อมูลใน file acess เป็น field ICD10(การวินิจฉัยโรค ชึ่งประกอบด้วยตัวอักษร 2 - 7ตัว ขึ้นต้นจะเป็นภาษาอังกฤษนำหน้า)
       ใน field นี้จะรวมโรคทุกชนิดที่ผปเป็น
PT1 A01 B0147 A23
PT2 A005
PT3 B01 M4587 A002 C125 D01 Z117
PT4 N1255 M67 B471
PT5 J009 J11 A02 B1
PT6 B0147 A23

    1. หากผมจะแยก field นี้ให้ field 1 อัน 1 ICD ทำอย่างไรครับ
    2. หากไม่แยกแล้ว เนื่องจากมี rec เป็น 100000 rec
ผมสามารถสร้าง Q อย่างไร ว่าจะเอาผปที่เป็น B0147 A23 เท่านั้น
   3 ผมมีความรู้สึกเมื่อเรา import excel ไปทำงาน ที่ access แล้ว export ออกมา excel นั้นจะเปิดอ่านได้ช้ามาก ทั้งๆที่ข้อมูลไม่มาก ไม่แน่ใจว่าคนอื่นเป็นแบบนี้ไหมครับ
                           ขอบคุณครับ

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

1 @R14481
สร้างQ และที่ฟิลด์ ที่เก็บข้อมูล เขียนcodeที่เงื่อนไข Like"*"&"BO147 A23"&"*"
ครูต่ัอง
2 @R14482
ครูต้องครับ โจทย์เค้าไม่ละเอียด ICD10 แต่ละตัว ขั้นด้วย space
ถ้าใช้แบบนี้ Like"*"&"BO147 A23"&"*" มันจะมี 2 โรคติดกัน

ผู้ป่วย พิมพ์ ผป ผมคนสาธารณสุขยัง งง ตั้งนาน
3 @R14483
ขอโทษนะครับอาจรีบพิมพ์ไปหน่อย ICD10 แต่ละตัวขั้นด้วย space แต่ผม

แตก field ICD10 ออกมาเป็น fld ใหม่แต่ละโรค เช่น

PT1[A01 B0147 A23] มี 3 โรคใน field     ผมต้องการแตก field แต่ละโรค
เป็นแต่ละ 1 fld ครับ ตย. มีfld dx1, dx2, dx3

PT1 [ Dx1 A01] [Dx2 B0147] [Dx3 A23]

PT3 [B01 M4587 A002 C125 D01 Z117] ผปมี 5 โรค แตกเป็น

PT3 [Dx1 B01] [Dx2 M4587] [Dx3 A002] [Dx4 C125] [Dx5 01]               [Dx6 Z117]
4 @R14484
เจ้าของกระทู้ ต้องอธิบายที่ละเอียดและเข้าใจง่ายมากกว่านี้นะครับ
แม้ผู้อยู่ในวงการสารธาณสุขด้วยกัน อย่างคุณ Un ก็ยังงเลย แล้วคนอื่นๆ ??
ตามที่เข้าใจโจทย์ของคุณ น่าจะไม่ใช่การแยกคำ แต่น่าจะเป็นการกรองเอาเฉพาะข้อมูลที่ต้องการมากกว่า
หากเข้าใจถูก ก็ช้ Q กรองข้อมูลที่ต้องการ แบบธรรมดาๆก็น่าจะเพียงพอแล้ว
ตอบตามที่เข้าใจนะครับ
5 @R14485
แบบนี้นะครับ PT1 ได้รับ วินิจฉัยโรคบันทึกใน field DX[A01 B0147 A23]

แต่ผมต้องการสร้าง Q ให้แยกการวินิจฉัยโรค   field DX ชึ่งเป็น field ที่รวมการวิ

นิจฉัยโรค เป็นอย่างนี้ครับ

PT1
             DX                    Dx1               Dx2                     Dx3

   [A01 B0147 A23]       [A01]            [B0147]               [A23]
                            
ปัยหาคือบางคนมี 7-8 โรค และตังย่อการวินิจฉัย ก็มีจำนวนตัวอักษร+ตัวเลขไม่เท่ากันครับ เช่น PT คนที่2-4 ครับ และ rec มีเป็นแสนเลยครับ
6 @R14487
ไม่ยากกรองธรรมดาๆนั่นเอง
ใน Q ถ้ามีโรค 30โรคก็ทำ30ฟิลด์

                     PT              DX1:[DX]                  DX2:[DX]
เงื่อนไข                     Like"*"&"A01"&"*"   Like"*"&"B0147"&"*"


ครูต้อง
7 @R14495
ผมขอตอบในสมมุติฐานว่า คุณ อ่อนโรค มีเหตุผลที่ต้องออกแบบฐานข้อมูลแบบนี้นะครับ
คำถามที่ 1 (หากผมจะแยก field นี้ให้ field 1 อัน 1 ICD ทำอย่างไรครับ)
- ในคิวรี่ เพิ่มฟิลด์ขึ้นมาอีก 10 ฟิลด์ จะใช้ชื่ออะไรก็ได้เช่น DX1...DX10
- สร้าง Module เพื่อเขียนฟังก์ชั่นขึ้นมาใหม่ ใส่โค๊ดนี้ลงไป

Public Function SplitT(txt_String As String, txt_Chr As String, FCount As Integer) As String
    Dim TCount As Integer, NCount As Integer, OCount As Integer
    NCount = 1
    Do
        OCount = OCount + 1
        TCount = InStr(NCount, txt_String, txt_Chr)
        If TCount > 0 Then
            NCount = 1 + TCount
        End If
    Loop Until OCount = FCount
    If TCount > 0 Then
        If InStr(TCount + 1, txt_String, txt_Chr) > 0 Then
            SplitT = Mid(txt_String, NCount, InStr(TCount + 1, txt_String, txt_Chr) - TCount - 1)
        Else
            SplitT = Mid(txt_String, NCount, Len(txt_String))
        End If
    End If
End Function


- กลับมาที่คิวรี่ ที่ฟิลด์สร้างขึ้นใหม่ DX1 เขียนคำสั่งดังนี้

Dx1: IIf(Not IsNull(DX),SplitT(DX," ",1),Null)

- โดย DX คือชื่อฟิลด์เก็บฐานข้อมูล PT คุณนะครับ

- ทำเหมือนกันที่ DX2 ก็ให้ใส่เป็นค่า 2 ดังนี้:

DX2: IIf(Not IsNull(DX),SplitT(DX," ",2),Null)

- จนครบ 10 ฟิลด์ แล้ว Run คิวรี่ดู
ปล. ชื่อฟิลด์ควรใส่วงเล็บใหม่นะครับ แต่ผมไม่กล้าพิมพ์ กลัวจะ Post ไม่ได้

คำถามที่ 2 (หากไม่แยกแล้ว เนื่องจากมี rec เป็น 100000 rec
ผมสามารถสร้าง Q อย่างไร ว่าจะเอาผปที่เป็น B0147 A23 เท่านั้น)

- ที่คิวรี่ ฟิลด์ DX หัวข้อ Crteria: (เวอร์ชั่นไทยคือ เงื่อนไข)

หากใช้ AND หมายถึง PT ที่มีทั้งสองรหัส
Like "*B0147*" AND Like "*A23*"

หากใช้ OR หมายถึง PT ที่มีอย่างหนึ่งอย่างใด หรือสองอย่าง
Like "*B0147*" OR Like "*A23*"

คำถามที่ 3 (ผมมีความรู้สึกเมื่อเรา import excel ไปทำงาน ที่ access แล้ว export ออกมา excel นั้นจะเปิดอ่านได้ช้ามาก ทั้งๆที่ข้อมูลไม่มาก ไม่แน่ใจว่าคนอื่นเป็นแบบนี้ไหมครับ)

- ไม่ทราบครับ เพราะระดับแสนเรคคอร์ดไม่เคยทำใน Excel แต่หากระดับหมื่นต้นๆ ไม่เป็นนะครับ
8 @R14496
เพิ่มเติม แก้ไขหน่อย ผมไม่แน่ใจข้อมูลในฟิลด์ หากข้อมูล PT1...2 อยู่คนละฟิลด์กับรหัสโรค
DX1 ในคิวรี่ให้ใส่อย่างนี้แทนครับ

DX1: IIf(InStr(1,DX," ")=0,Mid(DX,1,Len(DX)),Mid(DX,1,InStr(1,DX," ")-1))

ส่วน DX อื่นๆ
DX2: IIf(Not IsNull(DX),SplitT(DX," ",1),Null)
DX3: IIf(Not IsNull(DX),SplitT(DX," ",2),Null)
DX4: IIf(Not IsNull(DX),SplitT(DX," ",3),Null)
DX5: IIf(Not IsNull(DX),SplitT(DX," ",4),Null)

ประมาณนี้ครับ
9 @R14501
     กราบขอบพระคุณ อจ.TTT มากๆ เลยครับ ตรงตามใจที่อ่อนโรคต้องการ 100%
    
    ไม่กล้าเขียนไปถามไหม เพราะเราอธิบายไม่ถูก ให้คนเข้าใจตามที่เราไม่เข้าใจ ไม่ได้ครับ

    :ซึ้ง อจ. TTT จริงๆที่เข้าใจผม
10 @R14502
   ทดลองใช้แล้วได้ผลครับ อจ. TTT       อจ.ยังมองการณืไกลด้วยเพราะฐานข้อมูลที่ได้รับมาเป็นแบบที่ 2 คือ PT กับ dx อยู่คนละ fld ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2256s