สร้างเงื่อนไขใน Query แล้ว #Error
กระทู้เก่าบอร์ด อ.Yeadram

 2,749   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

1 @R17703
แล้ว Expr1 ให้ข้อมูลอะไรออกมาครับ

(ตัวเล็กเกิน หาที่ผิดไม่ได้เลย)
2 @R17704
เพิ่มเติมครับ
- HourWrk คือชั่วโมงทำงาน ตามปกติจะใส่ตัวเลขลงไปอย่างเดียว แต่มันจะมีไปออกรายงานอีกตัวนึง ให้ระบุว่ามีค่ารถด้วย ผมเลยคีย์รวมกัน แล้วมาแยกตอนทำ Query ครับ เช่น 8ร , 4.5ร , 3.5ร( ร = ค่ารถ)
-ใน Query ผมใช่คำสั่งนี้ครับ Expr1: Val(NZ([HourWrk])) เพื่อแยกตัวเลขออกจากตัวอักษร

3 @R17708
เอาเป็นว่าส่งไฟล์มาให้ผมดูดีกว่า ยิ่งอ่านยิ่งงง

ปัญหาคือสร้างเงื่อนไขแล้ว Error ชิมิ?

อีเมลผมนะ

mrtouch999@gmail.com
4 @R17713
เรียนคุณธัชชัย ผมส่งไฟล์ให้แล้วนะครับ
5 @R17716
OK กำลังงงเลยว่าส่งมาจากทางไหน เพราะรับปรึกษา Access ไว้หลายที่
6 @R17718
ผมไม่ได้ไล่ Flow ของฐานข้อมูลคุณนะครับ

แต่ให้นำคำสั่งต่อไปนี้ไปแทนที่คำสั่งเดิมตรง Expr6 แล้วปัญหา Error จะหายไป

Expr6: IIf("[Remark]=0",[Expr1]*23/8)
7 @R17720
ขอบคุณครับคุณธัชชัย เบื้องต้นใช้งานได้แล้วครับ อีกนิดครับ
-ถ้ามีตัวแปร คือ x (x = ถ้าเป็นอาทิตย์ ให้ = x) ต้องมีคำสั่งเพิ่มเติมอย่างไรครับ
แล้วให้ปัดเศษทศนิยมเป็นจำนวนเต็มครับ(อาจจะนำไปประยุกต์ใช้กับฟิวด์อื่นๆได้ครับ)
ขอบคุณครับ
8 @R17721
ขอโทษครับ คุณธัชชัย ที่ผมดูไม่ละเอียดครับ
ผมมาลองไล่ดูอีกครั้ง จากคำถามที่ว่า
ถ้า 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 ให้ผมด้วยนะครับ
ขอบคุณอีกครั้งครับ
10 @R17725
ใช้คำสั่ง int ครอบครับ

เช่น Expr6: IIf([Remark]="0",Int([Expr1]*23/8))
11 @R17727
post ไม่ได้ครับ
12 @R17728
" แล้วให้ปัดเศษทศนิยมเป็นจำนวนเต็มครับ" คำถามของผมอาจไม่ชัดเจนต้องขอโทษด้วยครับ
-เพิ่ม int แล้วได้ค่า ปัดเศษลงครับ ( 11.5 = 11)
-ผมต้องการแบบนี้ครับ 11.5 = 12    ,   11.4 = 11 ครับ
ขอบคุณครับ
13 @R17729
ผมใช้ Access 2013 มันมีคำสั่ง Round นะครับ

ไม่แน่ใจว่ารุ่นที่คุณใช้อยู่มีหรือเปล่า

Expr6: IIf("[Remark]=0",Round([Expr1]*23/8,0))
14 @R17731
ลืมไป ใช้สูตรจะได้เป็นจำนวนเต็มแท้ๆ ครับ

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 ก็ปัดขึ้นลงตามปกติ
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
18 @R17737
ขอบคุณครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3345s