สรุปยอดวันลาประจำปีหลาย Qeury หลายๆ อัน
กระทู้เก่าบอร์ด อ.Yeadram

 2,436   6
URL.หัวข้อ / URL
สรุปยอดวันลาประจำปีหลาย Qeury หลายๆ อัน

นี้คือแบบฟอร์มที่สรุปยอดประจำปีงบประมาณ

ผมต้องทำ Qeury หลายอันมากกว่าจะได้แบบฟอร์มนี้ขึ้นโดยเริ่มแยกประเภทการลาของแต่ละเดือน เช่น ลาป่วย ก็ต้องทำ Qeury 1-12 เดือน แล้วค่อยเอา Qeuryทั้ง 12 อันมาเชื่อมต่อกันแล้วเอาผลที่ได้ไปเก็บตารางชั่วคราวลาป่วย ซึ่งQeury เป็นมุมมอง Sql =SELECT [Q Year1].Year_ID, [Q Year1].History_ID, [Q Year1].Year, [Q Year1].Prefix, [Q Year1].Name, [Q Year1].[Position type].[Position type], [Q Year1].[Position type1], [Q IT-Oct].IT10, [Q IT-Nov].IT11, [Q IT-Dec].IT12, [Q IT-Jan].IT1, [Q IT-Feb].IT2, [Q IT-Mar].IT3, [Q IT-Appil].IT4, [Q IT-May].IT5, [Q IT-Jun].IT6, [Q IT-July].IT7, [Q IT-Aug].IT8, [Q IT-Sep].IT9, [Sasom Patien history].[Sa-patien1], [Sasom Patien history].[Sa-patien], ntz([IT10])+ntz([IT11])+ntz([IT12])+ntz([IT1])+ntz([IT2])+ntz([IT3])+ntz([IT4])+ntz([IT5])+ntz([IT6])+ntz([IT7])+ntz([IT8])+ntz([IT9]) AS IT
FROM (((((((((((([Q Year1] LEFT JOIN [Q IT-Oct] ON ([Q Year1].Year = [Q IT-Oct].Year) AND ([Q Year1].History_ID = [Q IT-Oct].Name_ID)) LEFT JOIN [Q IT-Nov] ON ([Q Year1].Year = [Q IT-Nov].Year) AND ([Q Year1].History_ID = [Q IT-Nov].Name_ID)) LEFT JOIN [Q IT-Dec] ON ([Q Year1].History_ID = [Q IT-Dec].Name_ID) AND ([Q Year1].Year = [Q IT-Dec].Year)) LEFT JOIN [Q IT-Jan] ON ([Q Year1].History_ID = [Q IT-Jan].Name_ID) AND ([Q Year1].Year = [Q IT-Jan].Year)) LEFT JOIN [Q IT-Feb] ON ([Q Year1].History_ID = [Q IT-Feb].Name_ID) AND ([Q Year1].Year = [Q IT-Feb].Year)) LEFT JOIN [Q IT-Mar] ON ([Q Year1].History_ID = [Q IT-Mar].Name_ID) AND ([Q Year1].History_ID = [Q IT-Mar].Year)) LEFT JOIN [Q IT-Appil] ON ([Q Year1].History_ID = [Q IT-Appil].Name_ID) AND ([Q Year1].Year = [Q IT-Appil].Year)) LEFT JOIN [Q IT-May] ON ([Q Year1].Year = [Q IT-May].Year) AND ([Q Year1].History_ID = [Q IT-May].Name_ID)) LEFT JOIN [Q IT-Jun] ON ([Q Year1].Year = [Q IT-Jun].Year) AND ([Q Year1].History_ID = [Q IT-Jun].Name_ID)) LEFT JOIN [Q IT-July] ON ([Q Year1].Year = [Q IT-July].Year) AND ([Q Year1].History_ID = [Q IT-July].Name_ID)) LEFT JOIN [Q IT-Aug] ON ([Q Year1].Year = [Q IT-Aug].Year) AND ([Q Year1].History_ID = [Q IT-Aug].Name_ID)) LEFT JOIN [Q IT-Sep] ON ([Q Year1].Year = [Q IT-Sep].Year) AND ([Q Year1].History_ID = [Q IT-Sep].Name_ID)) INNER JOIN [Sasom Patien history] ON [Q Year1].History_ID = [Sasom Patien history].Name;
( ได้ 1 ตารางชั่วคราวลาป่วย )
ส่วนการมาสาย ลาพักผ่อนก็ทำเหมือนกันกับลาป่วย สร้างQeury ไปเก็บตารางชั่วแยกตามแต่ละประเภทการลา แล้วค่อยเอาตารางชั่วคราวมาเป็น Qeury เชื่อมต่อกัน เหตุผลที่ต้องแบบนี้เพราะว่าถ้านำ Qeuryทั้งหมดมาเชื่อมต่อจะใช้เวลาประมวลผลช้ามากๆๆๆๆๆๆๆ
ประเด็นคำถามมีอยู่ว่า
1. มีวธีการเขียนคำสั่ง Code อะไรไหมที่ไม่ต้องสร้างคิวรี่เยอะมากขนาดนี้เพื่อให้ได้คำตอบแล้วเขียนอย่างบ้าง พึ่งศึกษา Access มือใหม่ครับหรืออาจารย์มีตัวอย่างให้ศึกษาไหมครับ ผมก็พยายามศึกษาหาจากกระทู้ต่างจากเวปบอร์ดนี้แหละครับที่ให้ความรู้มากมาย แต่ก็ยังไม่ได้คำตอบ เขียนโปรแกรมการลาใช้ในหน่วยงานครับ

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

1 @R13019
statement ของคุณอ่านยากมาก
1 ตั้งชื่อออบเจค โดยมีช่องว่างภายในคำ เวลาเขียน statement มันเลยต้องใสเครื่องหมาย blanket คร่อมหน้าหลัง อ่านตามได้ยากมาก
2 ตั้งชื่อสื่อความหมายไม่ค่อยชัดเจน อย่างคำว่า IT ไม่รู้ว่ามันสื่อถึงอะไร อ่านแล้วเดาไม่ออก
ผมพยายามจะอ่านตามแล้วเดาแนวโครงสร้างข้อมูลของคุณ อ่านไม่ได้ ผมเลยคัดลอกไปวางใน notepad แล้วแทนคำต่างๆ เพื่อให้อ่านง่ายขึ้น เจอจุดอ่อนจุดบกพร่องสองสามจุดังนี้
1 คิวรี่หรือตารางของคุณที่ชื่อ [Q Year1] มีฟิลด์ชื่อ Year และอีกฟิลด์ชื่อ Name อันนี้เป็นคำสงวนครับ ไม่ควรใช้ (เป็นชื่อฟังก์ชั่นพื้นฐานของระบบ Access)
2 คิวรี่หรือตารางของคุณที่ชื่อ [Sasom Patien history] มีใช้คำสงวนเอาไปตั้งชื่อฟิลด์อีก คือ Name ครับ (เป็นชื่อฟิลด์ของตาราง MsysObjects ซึ่งเป็นตารางของระบบ Access มันสร้างขึ้นเองอัตโนมัติแต่ซ่อนไว้)
3 ในส่วนหลังคีย์เวอร์ด SELECT ก็จะชื่อชื่อฟิลด์ต่างๆ ที่คุณเลือกให้แสดงผลแต่ละฟิลด์ก็จะแยกกันด้วยเครื่องหมายคอมม่า แต่มีจุดหนึ่งเขียนว่า [Q Year1].[Position type].[Position type อันนี้มันมี จุดสองครั้ง ก่อนจะคอมม่า ผมก็เลยงงครับ
สรุปอีกที แม้ผมจะคัดลอกสายอักขระดังกล่าวไปแทนคำต่างๆ เพื่อพยายามจะเดาโครงสร้าง ก็ยังเดาไม่ได้อยู่ดี จึงช่วยหาวิธีลัดให้ไม่ได้
คงต้องขอดูข้อมูลอื่นๆ เพิ่มเติมดังนี้
1 statement หรือโครงสร้างตารางของ [Q Year1]
2 statement หรือโครงสร้างตารางของ [Q IT-Dec]
3 statement หรือโครงสร้างตารางของ [Sasom Patien history]
หรือสำเนาข้อมูลของโปรแกรมของคุณมาทั้งก้อน ลบตาราง, คิวรี่, ฟอร์ม, รายงานอื่นๆ ที่ไม่เกี่ยวข้องกับรายงานนี้ออกให้หมด ลดข้อมูลตัวอย่างลง ให้เหลือ ไม่เกิน 100เรคคอร์ด เพื่อให้เล็ก เบาและสงวนความลับบางส่วนไว้ แล้วส่งไฟล์ซิปเข้าที่อีเมล์กลาง เขียนหัวข้ออีเมล์ให้สื่อถึงกระทู้นี้ด้วยครับ
( accboard _ gmail )
เดี๋ยวจะลองหาวิธีลัด หรือวิธีรวบรัดช่วยครับ
2 @R13021
ผมได้ส่ง file ตัวอย่าง ไปที่ accboard gmail แล้วครับ
ขอบคุณอาจารย์มากครับ
3 @R13027
ออนเอ็มเอสเอ็นได้ไหมครับ ดูข้อมูลตัวอย่างยากมากเลย ดูไม่ค่อยเข้าใจ
ปรับเปลี่ยนยากครับ สูตรการหาจำนวนวัน เดาที่มาที่ไปไม่ถูก
ตัวอย่างข้อมูลในตาราง Patien tory มีน้อยเกินไป

วันนี้ผมจะออนรอ จน 6 โมงเย็นครับ yeadram hotmail
4 @R13028
ผมติดต่ออาจารย์ไม่ได้ครับ ผมได้ส่งคำอธิบายที่มาของจำนวนวันลา ไปที่ mail อาจารย์ ขอบคุณอาจารย์มากครับที่ให้คำปรึกษา
5 @R13029
ดูการปรับปรุง ตามนี้ครับ
Report
YearAbsendSheet_PositionType1
เลข 1 หลักหลังชื่อคือรหัสของ กลุ่มข้าราชการ
Form
fr_YearPatienType01
fr_YearPatienType02
fr_YearPatienType06
เลขสองหลักหลังชื่อ คือรหัสของการลา
Query
มีทั้งหมด 6 คิวรี่ ขึ้นต้นชื่อด้วยคำว่า qrOffYear
qrOffYearStructure เป็นคิวรี่ที่ทำขึ้นเพื่อแก้ไขจุดบกพร่องต่างๆ ของตาราง patien tory นั่นก็คือเป็นจุดเริ่มต้นของคิวรี่ทั้งหมด

สูตรการหาจำนวนวันลาของคุณ ครอบคลุมทุกกรณีหรือไม่
ถ้าพนักงานลาตั้งแต่ บ่ายวันพุธ แล้วจะกลับมาทำงาน บ่ายวันศุกร์ โดยความเป็นจริงทั่วๆ ไปถือว่า ลากี่วัน แล้วสูตรของคุณจะคำนวนออกมาได้ตามนั้นหรือไม่

ได้ส่งตัวอย่างการปรับปรุง แนบไปกับเมล์ฉบับตอบกลับแล้วนะครับ
สำหรับท่านอื่นที่สนใจ ศึกษาเป็นกรณีตัวอย่าง โหลดไฟล์ปัญหา และไฟล์ตอบกลับได้ที่อีเมล์ครับ
6 @R13032
ขอบคุณเป็นอย่างสูงอีกครั้งครับสำหรับตัวอย่างเป็นแนวทางในการปรับปรุงงาน
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 1.6458s