แบ่งข้อมูลตามเปอร์เซ็นต์
กระทู้เก่าบอร์ด อ.Yeadram

 1,182   9
URL.หัวข้อ / URL
แบ่งข้อมูลตามเปอร์เซ็นต์

หากเราต้องการวนลูปในตารางโดยใช้ Record set สมมติเช่น

ตาราง A มีข้อมูล
ID            BRANCH           USER       
001        BKK                      A < ตรงนี้อยากให้โปรแกรมมันใส่ข้อมูลให้เอง
002        NON                      B
003        BKK                      A
004        BKK                      C
005        NON                      E
006        BKK                      C
007        RAY                      D
008        RAY                      F
009        RAY                      F
010        RAY                      F
011        BKK                      C

ตาราง B มีข้อมูล
USER      BRANCH       PERCENT
A             BKK              40
B             NON             50
C             BKK             60
D             RAY             25
E             NON             50
F             RAY             75

ผมจะวนลูปในตารางอย่างไรให้สามารถแบ่งข้่อมูลตามเปอร์เซ็นต์ประมาณรูปแบบ
ดังตัวอย่างข้างต้นนี้ครับโดยตาราง B เป็นตารางตั้งต้นข้อมูล ส่วนตาราง A เป็นตารางที่ต้องการให้เติมข้อมูลลงใน feild USER ครับ

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

1 @R16143
ไม่มีใครให้แนวทางได้เลยเหรอครับ ... T_T
2 @R16154
T_T
3 @R16160
คำถามผมไม่รู้เรื่องอ่ะครับ เลยตอบไม่ได้ อะไรมาจากไหน แนวคิด สูตร วิธีคิด คืออะไร เปอร์เซ็นต์ร้อยละมาจากไหน ID คิดยังไงทำไมเรียงแบบนี้
คำถามคุณไม่ธรรมดาเลยครับ หากด้วยข้อมูลแค่นี้ผมว่าไม่มีใครตอบได้มั้งครับ เอ๊ะหรือว่ามี ช่วยแนะนำคุณ ManUZA หน่อยนะครับ ยอมรับเลยว่าอ่อนมากเรื่องตัวเลข
4 @R16163
เปอร์เซ็นต์ร้อยละก็กำหนดขึ้นมาเองแหละครับไม่มีอะไร วิธีคำนวณหาเปอร์เซ็นต์ก็คำนวณตามตาราง B ที่ผมกำหนดมา
สมมติเช่น

ตาราง B มีข้อมูล (ตัดเฉพาะ BRANCH BKK มาเพื่อให้เห็นภาพ)
USER      BRANCH      PERCENT
A             BKK             40
C             BKK             60

ทีนี้เรามาดูตาราง A ต่อ
ตาราง A มีข้อมูล
ID            BRANCH           USER       
001        BKK                  A
003        BKK                  A
004        BKK                  C
006        BKK                  C
011        BKK                  C

ตรงช่อง USER ปกติจะไม่มีข้อมูล
ดังนั้นหากเรา Group เฉพาะ BRANCH ที่เป็น BKK มาก็จะไ้ด้จำนวนทั้งสิ้น 5 Record ดังนั้นหากคิดเป็นเปอร์เซ็นต์ก็จะได้เท่ากับ

A : (5/100)*40 = 2 Record
C : (5/100)*60 = 3 Record

ซึ่งจำนวน Record ที่ต้องเพิ่มเข้าไปในช่อง USER ผมสามารถหาออกมาได้แล้ว
แต่จะใส่ข้อมูลเข้าไปยังได้ซึ่งสิ่งสำคัญคือต้องให้ BRANCH ตรงกันทั้งสองตารางกับจำนวนข้อมูลที่เพิ่มเข้าไปต้องตรงตามเปอร์เ้ซ็นต์

ซึ่งผมติดตรงที่ว่าหากใช้วิธีวนลูปในตาราง B เพื่อตรวจสอบ BRANCH ที่ตรงกัน
จะทำอย่างให้โปรแกรมรู้ว่า A ได้จำนวนครบตามเปอร์เซ็นต์แล้วให้ข้าม Recordset ไปยัง C ต่อ ประมาณนี้ครับ

ผมอธิบายยากไปหรือเปล่าครับ ...
5 @R16166
ทำไปเพื่ออะไรครับ พอไม่รู้ว่าจะไปใช้อย่างไร เลยไม่รู้ว่าจะให้คำตอบที่ถูกต้องหรือเปล่า
6 @R16169
แค่ต้องการแบ่งงานให้ USER ตามผลงานของแต่ละคน แค่นั้นครับ
โดยงานที่ได้รับเปอร์เซ็นต์งานมากน้อยก็ขึ้นอยู่กับผลงานของแต่ละคน
ซึ่งผมจะเป็นคนกำหนดเอง โดยเงื่อนไขให้แบ่งการกระจายงานตาม BRANCH ที่ USER แต่ละคนรับผิดชอบงานและจำนวนงานก็ตามเปอร์เซ็นต์
ของแต่ละ USER ครับ
7 @R16173
ผมว่าด้วยแนวคิดแบบนี้มันมีจุดอ่อนทำให้อาจเกิดข้อมูลผิดพลาดได้เยอะนะครับ แต่ผมก็ไม่รู้จะแนะนำยังไง ไม่เคยมีแนวคิดแบบนี้ซะด้วย เอางี้ครับ ลองๆ ดูก่อนแล้วกันว่าใช้ได้ไหม ผมอ้างอิงจากตารางของที่คุณโพสถามครั้งแรกเลยนะครับ

1. ลองสร้างปุ่มใหม่บนฟอร์ม ใส่โค๊ดบนปุ่ม On Click ตามนี้ครับ

    Dim db As DAO.Database
    Dim rs As DAO.Recordset, rs2 As DAO.Recordset
    Dim iMAX As Long, iSame As String
    Set db = CurrentDb
    Set rs = db.OpenRecordset("B", dbOpenDynaset)
    iSame = 1
    db.Execute "UPDATE A SET USER=''", dbFailOnError
    rs.MoveFirst
    Do Until rs.EOF
        iMAX = DCount("BRANCH", "A", "BRANCH = '" & rs!BRANCH & "'")
        Set rs2 = db.OpenRecordset("SELECT BRANCH, USER FROM A WHERE BRANCH = '" & rs!BRANCH & "'")
        rs2.MoveFirst
        Do Until rs2.EOF
            If rs2!BRANCH = rs!BRANCH And iSame <= CInt((iMAX / 100) * rs!PERCENT) And rs2!User & "" = "" Then
               rs2.Edit
               rs2!User = rs!User
               rs2.Update
               iSame = iSame + 1
            End If
            rs2.MoveNext
        Loop
        rs.MoveNext
        iSame = 1
    Loop
    rs.Close: Set rs = Nothing
    rs2.Close: Set rs2 = Nothing


ชื่อทั้งหมดผมอ้างจากชื่อตัวอย่างของคุณในนี้นะครับ ปรับใช้ดูครับ
8 @R16180
ขอบคุณ คุณ TTT ครับ ผมทำได้แล้วครับ
ปล : แนวทางการเขียนโค้ดคล้ายกันกับของผมเลยครับ
9 @R16181
คนเขียนโปรแกรม สามารถเขียนได้หมดตามที่ต้องการ และมักไม่ค่อยมีข้อจำกัดเท่าไหร่ แต่ปัญหาอยู่ที่ว่า จะสื่อสารอย่างไรให้คนเขียนโปรแกรมเค้าเข้าใจถึงสิ่งที่ต้องการ ซึ่งแต่ละคนก็มีวิธีเขียนที่แตกต่างกัน แต่ได้ผลลัพธ์ (Output) ตามที่ต้องการได้ ดังนั้น ควรบอกให้ทราบถึงผลลัพธ์ที่ต้องการให้ชัดเจน (ถ้าทำเป็นผลลัพธ์สมมุติออกมาให้ดูได้ยิ่งดี) แล้วค่อยบอกถึง Input ที่เรามีอยู่ขณะนี้ว่ามีอะไรอยู่บ้าง ซึ่งคนเขียนโปรแกรมก็จะทราบทันทีว่า ยังขาดข้อมูลอะไรบ้างหรือเปล่าเพื่อให้ได้ผลลัพธ์ตามที่ต้องการ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3139s