กระทู้เก่าบอร์ด อ.Yeadram
2,812 18
URL.หัวข้อ /
URL
สร้างเงื่อนไขใน Query แล้ว #Error
เรียนท่านอาจารย์ และผู้รู้ทุกท่าน
จากรูปภาพ ผมทำการสร้างเงื่อนไขใน Query เพื่อตอบโจทย์นี้ครับ
- ถ้า (Remark = 1 ให้ Expr1 * 23 / 8) จะได้เท่ากับ ค่าทำงานกลางแจ้ง ของแต่ละวัน
ซึ่งข้อมูลเบื้องต้นมีดังนี้
-ในตาราง Employee ผมเพิ่มฟิวด์ Remark เพื่อที่จะระบุว่า พนักงานที่ทำงานอยู่ แผนก "ธุรการ" จะได้ค่า "ทำงานกลางแจ้ง" วันละ 23 บาท (ผ.อื่นๆ ไม่มีค่ากลางแจ้ง)
-ในฟิวด์ Remark ผมใส่ 1 = ได้ค่าทำงานกลางแจ้ง , 0 = ไม่ได้ค่าทำงานกลางแจ้ง
- ตอนแรกผมออกแบบตารางให้กรอกข้อมูลลงไป เช่น มาทำงาน 8 ชม. ก็ให้กรอกตัวเลขเข้าไป 23 ถ้าทำงานไม่เต็ม 8 ชม. ก็เอาชั่วโมงทำงานมาหารกับค่าทำงานกลางแจ้ง โดยใช้เครื่องคิดเลข
-ผมลองมาคิดอีกที มาออกแบบที่ Query เพิ่ม ฟิวด์ ใหม่สร้างเงื่อนไข ใส่สูตรลงไป เพื่อให้ได้ตัวเลขออกมาจะดีกว่าไหม
-ผมได้ค้นหาข้อมูลเก่าๆ เพื่อที่จะได้ตอบโจทย์ที่ผมตั้งไว้ ไม่ทราบว่าถูกต้องหรือไม่ เกี่ยวกับคำว่า "ถ้า" ต้องใช้ " IIF" ใช่หรือไม่ครับ
ขอบคุณครับ
18 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R17704
เพิ่มเติมครับ
- HourWrk คือชั่วโมงทำงาน ตามปกติจะใส่ตัวเลขลงไปอย่างเดียว แต่มันจะมีไปออกรายงานอีกตัวนึง ให้ระบุว่ามีค่ารถด้วย ผมเลยคีย์รวมกัน แล้วมาแยกตอนทำ Query ครับ เช่น 8ร , 4.5ร , 3.5ร( ร = ค่ารถ)
-ใน Query ผมใช่คำสั่งนี้ครับ Expr1: Val(NZ([HourWrk])) เพื่อแยกตัวเลขออกจากตัวอักษร
- HourWrk คือชั่วโมงทำงาน ตามปกติจะใส่ตัวเลขลงไปอย่างเดียว แต่มันจะมีไปออกรายงานอีกตัวนึง ให้ระบุว่ามีค่ารถด้วย ผมเลยคีย์รวมกัน แล้วมาแยกตอนทำ Query ครับ เช่น 8ร , 4.5ร , 3.5ร( ร = ค่ารถ)
-ใน Query ผมใช่คำสั่งนี้ครับ Expr1: Val(NZ([HourWrk])) เพื่อแยกตัวเลขออกจากตัวอักษร
3 @R17708
เอาเป็นว่าส่งไฟล์มาให้ผมดูดีกว่า ยิ่งอ่านยิ่งงง
ปัญหาคือสร้างเงื่อนไขแล้ว Error ชิมิ?
อีเมลผมนะ
mrtouch999@gmail.com
ปัญหาคือสร้างเงื่อนไขแล้ว Error ชิมิ?
อีเมลผมนะ
mrtouch999@gmail.com
4 @R17713
เรียนคุณธัชชัย ผมส่งไฟล์ให้แล้วนะครับ
5 @R17716
OK กำลังงงเลยว่าส่งมาจากทางไหน เพราะรับปรึกษา Access ไว้หลายที่
6 @R17718
ผมไม่ได้ไล่ Flow ของฐานข้อมูลคุณนะครับ
แต่ให้นำคำสั่งต่อไปนี้ไปแทนที่คำสั่งเดิมตรง Expr6 แล้วปัญหา Error จะหายไป
Expr6: IIf("[Remark]=0",[Expr1]*23/8)
แต่ให้นำคำสั่งต่อไปนี้ไปแทนที่คำสั่งเดิมตรง Expr6 แล้วปัญหา Error จะหายไป
Expr6: IIf("[Remark]=0",[Expr1]*23/8)
7 @R17720
ขอบคุณครับคุณธัชชัย เบื้องต้นใช้งานได้แล้วครับ อีกนิดครับ
-ถ้ามีตัวแปร คือ x (x = ถ้าเป็นอาทิตย์ ให้ = x) ต้องมีคำสั่งเพิ่มเติมอย่างไรครับ
แล้วให้ปัดเศษทศนิยมเป็นจำนวนเต็มครับ(อาจจะนำไปประยุกต์ใช้กับฟิวด์อื่นๆได้ครับ)
ขอบคุณครับ
-ถ้ามีตัวแปร คือ x (x = ถ้าเป็นอาทิตย์ ให้ = x) ต้องมีคำสั่งเพิ่มเติมอย่างไรครับ
แล้วให้ปัดเศษทศนิยมเป็นจำนวนเต็มครับ(อาจจะนำไปประยุกต์ใช้กับฟิวด์อื่นๆได้ครับ)
ขอบคุณครับ
8 @R17721
ขอโทษครับ คุณธัชชัย ที่ผมดูไม่ละเอียดครับ
ผมมาลองไล่ดูอีกครั้ง จากคำถามที่ว่า
ถ้า Remark = 1 ให้ Expr1*23/8
จากสูตรที่ให้ผมมา IIf("[Remark]=0",[Expr1]*23/8)
ไม่ว่า Remark จะเท่ากับ 1 หรือ 0 มันก็คูณด้วย 23 หมดครับ
ผมมาลองไล่ดูอีกครั้ง จากคำถามที่ว่า
ถ้า Remark = 1 ให้ Expr1*23/8
จากสูตรที่ให้ผมมา IIf("[Remark]=0",[Expr1]*23/8)
ไม่ว่า Remark จะเท่ากับ 1 หรือ 0 มันก็คูณด้วย 23 หมดครับ
9 @R17722
ไชโยได้คำตอบแล้วครับ คุณธัชชัย ผมลองแก้ไขดังนี้ครับ
จาก
Expr6: IIf("[Remark]=0",[Expr1]*23/8)
แก้ไขเป็น
Expr6: IIf([Remark]="0",[Expr1]*23/8)
แต่ว่ารบกวนคุณธัชชัย ช่วยกรุณาดูคำถาม R17720 ให้ผมด้วยนะครับ
ขอบคุณอีกครั้งครับ
จาก
Expr6: IIf("[Remark]=0",[Expr1]*23/8)
แก้ไขเป็น
Expr6: IIf([Remark]="0",[Expr1]*23/8)
แต่ว่ารบกวนคุณธัชชัย ช่วยกรุณาดูคำถาม R17720 ให้ผมด้วยนะครับ
ขอบคุณอีกครั้งครับ
10 @R17725
ใช้คำสั่ง int ครอบครับ
เช่น Expr6: IIf([Remark]="0",Int([Expr1]*23/8))
เช่น Expr6: IIf([Remark]="0",Int([Expr1]*23/8))
11 @R17727
post ไม่ได้ครับ
12 @R17728
" แล้วให้ปัดเศษทศนิยมเป็นจำนวนเต็มครับ" คำถามของผมอาจไม่ชัดเจนต้องขอโทษด้วยครับ
-เพิ่ม int แล้วได้ค่า ปัดเศษลงครับ ( 11.5 = 11)
-ผมต้องการแบบนี้ครับ 11.5 = 12 , 11.4 = 11 ครับ
ขอบคุณครับ
-เพิ่ม int แล้วได้ค่า ปัดเศษลงครับ ( 11.5 = 11)
-ผมต้องการแบบนี้ครับ 11.5 = 12 , 11.4 = 11 ครับ
ขอบคุณครับ
13 @R17729
ผมใช้ Access 2013 มันมีคำสั่ง Round นะครับ
ไม่แน่ใจว่ารุ่นที่คุณใช้อยู่มีหรือเปล่า
Expr6: IIf("[Remark]=0",Round([Expr1]*23/8,0))
ไม่แน่ใจว่ารุ่นที่คุณใช้อยู่มีหรือเปล่า
Expr6: IIf("[Remark]=0",Round([Expr1]*23/8,0))
14 @R17731
ลืมไป ใช้สูตรจะได้เป็นจำนวนเต็มแท้ๆ ครับ
Expr6: IIf("[Remark]=0",Int(Round([Expr1]*23/8,0)))
Expr6: IIf("[Remark]=0",Int(Round([Expr1]*23/8,0)))
15 @R17732
ได้ค่าตามที่ต้องการแล้วครับ ขอบคุณ คุณธัชชัย อีกครั้งครับ
16 @R17734
อื่ม บอกเสริมนิดนะครับ การใช้ฟังก์ชั่น Round() หรือ CByte(), CInt(), CLng(), CCur() จะเป็นการปัดเศษแบบ Banker's Rounding คือ การปัดเศษเลขคู่ หมายถึงจะใช้หลักที่ว่า ถ้าจุดทศนิยมเป็น 5 หากเลขหน้าจุดเป็นเลขคู่จะปัดเศษลง แต่ถ้าเป็นเลขคึ่จะปัดขึ้น (จะไม่อธิบายมากแล้วเพราะกระทู้เก่าๆเคยอธิบายไว้เยอะแล้ว) ทดสอบได้ดังนี้
Round(2.5, 0) ผลลัพธ์ 2 (ปัดเศษลงเพราะหน้า .5 เป็นเลขคู่)
Round(3.5, 0) ผลลัพธ์ 3 (ปัดเศษขึ้นเพราะหน้า .5 เป็นเลขคี่)
ฉนั้นหากต้องการปัดเศษขึ้นเมื่อตัวเลขมีจุุดทศนิยมเป็น .5 แนะนำให้ใช้สูตรบวก 0.5 แล้วใช้ Int() แทนครับ
Int(2.5 + 0.5) ผลลัพธ์ 3
Int(3.5 + 0.5) ผลลัพธ์ 3
ปล. ส่วนจุดที่มากกว่า 5 หรือ น้อยกว่า 5 ก็ปัดขึ้นลงตามปกติ
Round(2.5, 0) ผลลัพธ์ 2 (ปัดเศษลงเพราะหน้า .5 เป็นเลขคู่)
Round(3.5, 0) ผลลัพธ์ 3 (ปัดเศษขึ้นเพราะหน้า .5 เป็นเลขคี่)
ฉนั้นหากต้องการปัดเศษขึ้นเมื่อตัวเลขมีจุุดทศนิยมเป็น .5 แนะนำให้ใช้สูตรบวก 0.5 แล้วใช้ Int() แทนครับ
Int(2.5 + 0.5) ผลลัพธ์ 3
Int(3.5 + 0.5) ผลลัพธ์ 3
ปล. ส่วนจุดที่มากกว่า 5 หรือ น้อยกว่า 5 ก็ปัดขึ้นลงตามปกติ
17 @R17736
แก้ไขพิมพ์ผิด
Round(2.5, 0) ผลลัพธ์ 2 (ปัดเศษลงเพราะหน้า .5 เป็นเลขคู่)
Round(3.5, 0) ผลลัพธ์ 4 (ปัดเศษขึ้นเพราะหน้า .5 เป็นเลขคี่)
ฉนั้นหากต้องการปัดเศษขึ้นเมื่อตัวเลขมีจุุดทศนิยมเป็น .5 แนะนำให้ใช้สูตรบวก 0.5 แล้วใช้ Int() แทนครับ
Int(2.5 + 0.5) ผลลัพธ์ 3
Int(3.5 + 0.5) ผลลัพธ์ 4
Round(2.5, 0) ผลลัพธ์ 2 (ปัดเศษลงเพราะหน้า .5 เป็นเลขคู่)
Round(3.5, 0) ผลลัพธ์ 4 (ปัดเศษขึ้นเพราะหน้า .5 เป็นเลขคี่)
ฉนั้นหากต้องการปัดเศษขึ้นเมื่อตัวเลขมีจุุดทศนิยมเป็น .5 แนะนำให้ใช้สูตรบวก 0.5 แล้วใช้ Int() แทนครับ
Int(2.5 + 0.5) ผลลัพธ์ 3
Int(3.5 + 0.5) ผลลัพธ์ 4
18 @R17737
ขอบคุณครับ
Time: 0.3379s
(ตัวเล็กเกิน หาที่ผิดไม่ได้เลย)