รวมตัวเลขไม่ได้


0 สมาชิก และ 3 บุคคลทั่วไป กำลังดูหัวข้อนี้

24 ก.ค. 63 , 09:07:30
อ่าน 1076 ครั้ง

kunlek

รวมตัวเลขไม่ได้
« เมื่อ: 24 ก.ค. 63 , 09:07:30 »

A  ยอดผลลัพธ์ จากตาราง เมื่อเกินอายุใช้งานมีค่า =1
B  หาผลรวม ไม่ได้ ???????

 

24 ก.ค. 63 , 09:48:43
ตอบกลับ #1

PNR

: รวมตัวเลขไม่ได้
« ตอบกลับ #1 เมื่อ: 24 ก.ค. 63 , 09:48:43 »

ถ้าเป็นไปได้ การใช้เงื่อนไขในการคำนวนต่างๆ ควรทำให้เสร็จในคิวรี่ที่จะแสดงผลในรายงาน
เพราะฟังชั้น Sum ต้องคำนวนจากฟิลล์ในคิวรี่หรือตารางครับ หรืออาจจะใช้ การคำนวนภายในบ้างแต่ก็ไม่ได้มากแบบนั้น

เช่น Sum(Field1+Field2) เป็นต้น

ผมทำตัวอย่างให้ดูไปเช็คความถูกต้องของเงื่อนไขเองเน้อ

« แก้ไขครั้งสุดท้าย: 24 ก.ค. 63 , 10:15:46 โดย PNR »
Time to stop for me  :dizzy:
 

24 ก.ค. 63 , 13:06:17
ตอบกลับ #2

kunlek

: รวมตัวเลขไม่ได้
« ตอบกลับ #2 เมื่อ: 24 ก.ค. 63 , 13:06:17 »
ในคิวรี่ ฟิลด์ depree_acc_bal ค่าเสื่อมสะสม ได้ทำ expression ว่า ถ้าคำนวณจำนวนวัน date_age มาจาก date_buy ถึงวันที่ิิออกรายงาน(คือสิ้นปี)   มากกว่าจำนวนอายุการใช้งาน(asset_term)*365 ค่าของ date_age=0 
ซึ่งรายงานผมจึงผิดครับ  เช่น ถ้าหม้อแปลงไฟฟ้า วันที่ซื้อมา  18/02/56 รายงานผมค่า "เสื่อมงวดนี้"  เป็น 0 ถ้าออกรายงาน วันที่ 31 ธค 61 ที่ถูกต้อง ยังมีจำนวนวัน 49 วัน เหลืออยู่ในปี 2561   ยอดที่ถูก จึงต้องเท่ากับ  [depree_day]*49 =7527.85 ครับ
****จะเขียน expression อย่างไร เพือ หาจำนวน จากวันที่ 1 มค ถึงวันที่ 18 กพ ? เท่ากับกี่ วัน

 

24 ก.ค. 63 , 14:21:15
ตอบกลับ #3

PNR

: รวมตัวเลขไม่ได้
« ตอบกลับ #3 เมื่อ: 24 ก.ค. 63 , 14:21:15 »
ุถ้าคำนวนจาก 365 วันคือ 1 ปี ก็ประมาณนี้ครับ


โค๊ด: [Select]
date_age: IIf(365-(DateDiff("d",([date_buy]),([ใส่วันที่สิ้นสุด]))-[asset_term]*365)<0,0,365-(DateDiff("d",([date_buy]),([ใส่วันที่สิ้นสุด]))-[asset_term]*365)+1)
แต่ถ้าอยากให้แสดงจำนวนวัน ไม่นับวันปัจจุบันก็ แก้เป็น
โค๊ด: [Select]
[code]date_age: IIf(365-(DateDiff("d",([date_buy]),([ใส่วันที่สิ้นสุด]))-[asset_term]*365)<0,0,365-(DateDiff("d",([date_buy]),([ใส่วันที่สิ้นสุด]))-[asset_term]*365))[/code]

จะเหลือ 48 วันนะครับ
Time to stop for me  :dizzy:
 

25 ก.ค. 63 , 14:19:57
ตอบกลับ #4

kunlek

: รวมตัวเลขไม่ได้
« ตอบกลับ #4 เมื่อ: 25 ก.ค. 63 , 14:19:57 »
หาจำนวนวัน(31/12/61)ในคิวรี่    โดย ใช้ วันที่ ลบ วันที่ ผลลัพท์ error   แต่ถ้าวันที่ เดี่ยวๆๆ ได้ ไม่รู้ต้องใช้นิพจน์?

 

26 ก.ค. 63 , 15:39:17
ตอบกลับ #5

kunlek

: รวมตัวเลขไม่ได้
« ตอบกลับ #5 เมื่อ: 26 ก.ค. 63 , 15:39:17 »
แก้ไขเรื่องตัวเลข สร้าง reportได้แล้ว ติดปัญหาเรื่อง ทศนิยม มีปัญหาเรื่องบางฟิลด์ ตัดทศนิยมเหลือ 2 ตำแหน่งไม่ได้  ไม่รู้เป็นสาเหตุใด

 

27 ก.ค. 63 , 21:32:27
ตอบกลับ #6

kunlek

เรียน อจ ช่วยพิจารณาปัญหาครับ
ค่าเสื่อมต้นงวด: Nz(IIf([status]=0,IIf(([วันต้นงวด]-[term_day])>0,([book_vul]),([วันต้นงวด]*[depree_day])),"0"))
ทำไมฟิลด์พวกนี้มีจุดทศนิยมมากมาย ใน properties sheet มีแต่ format   ไม่มีdecimal  แปลกๆๆครับ
และบรรทัดถัดไปของ ฟิลด์มูลค่าต้นงวด มูลค่าคงเหลือ ขึ้น error  ไม่รู้สาเหตุ

 

27 ก.ค. 63 , 21:41:55
ตอบกลับ #7

kunlek

มีวิธีกำหนด ทศนิยม 2 หลักได้อย่างไร
« ตอบกลับ #7 เมื่อ: 27 ก.ค. 63 , 21:41:55 »
จากกระทู้ที่แล้ว ที่มาของตัวเลข
 มูลค่าต้นงวด: Nz([book_vul]-[ค่าเสื่อมต้นงวด])
ค่าเสื่อมต้นงวด: Nz(IIf([status]=0,IIf(([วันต้นงวด]-[term_day])>0,([book_vul]),([วันต้นงวด]*[depree_day])),"0"))
วันต้นงวด: DateDiff("d",[date_buy],[befor_end_date])-1
มูลค่าคงเหลือ  : Nz(IIf([book_vul]-([ค่าเสื่อมต้นงวด]+[ค่าเสื่อมงวดนี้])=0,1,([book_vul]-([ค่าเสื่อมต้นงวด]+[ค่าเสื่อมงวดนี้]))))
จะมีฟังก์ชั่นอะไรมาครอบตัวเลขของผลลัพธ์นี้ให้มีทศนิยม เหลือ 2 ตำแหน่งได้บ้างครับ

 

28 ก.ค. 63 , 07:37:52
ตอบกลับ #8

kunlek

: รวมตัวเลขไม่ได้ ตอนนี้แก้ได้แล้ว
« ตอบกลับ #8 เมื่อ: 28 ก.ค. 63 , 07:37:52 »
ตอบกระทู้ตัวเอง ได้ข้อคิดจากเวปบอร์ดนี้ครับ แก้ปัญหาที่ติดคือ ใช้ ฟังก์ชั่น  Round([x],2) 

 
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

29 ก.ค. 63 , 14:14:16
ตอบกลับ #9

สันติสุข

: รวมตัวเลขไม่ได้
« ตอบกลับ #9 เมื่อ: 29 ก.ค. 63 , 14:14:16 »
ไม่ได้ไปดูรายละเอียดนะครับ แต่จะแนะนำว่าให้เลี่ยงการใช้ Round(N, D) เพราะเมื่อหลักต่อไปที่จะปัดเศษมีค่าเป็น 5 เขาจะไม่ปัดขึ้นเสมอไป เขาจะใช้วิธี Banker Rounding ซึ่งตามกฏจะปัดขึ้นหรือลงไปยังเลขคู่ที่ใกล้ที่สุด  เช่น Round(0.245, 2) ถ้าปัดขึ้นจะเป็น 0.25 แต่ปัดลงจะได้ 0.24 ดังนั้นเขาก็ปัดลงแทน จะได้เป็น 0.24  และ Round(0.235, 2) ก็จะได้ 0.24 เช่นกัน   แต่ Access ยิ่งมั่วไปกว่านั้นในค่าตัวเลขบางตัว เช่น Round(1.245, 2) ก็ควรจะเป็น 1.24 แต่กลับเป็น 1.25 ไปซะอย่างงั้น ซึ่งขัดกับ Banker Rounding ไปเสียอีก

ถ้าจะปัดเป็น 2 หลัก ให้ใช้เป็น CDec(Format(N, "0.00")) ดีกว่าครับ แต่ถ้าแสดงเฉยๆไม่ได้เอาไปคำนวน ก็ใช้แค่ Format(N, "0.00") ก็พอ

อีกอย่างที่ขอแนะนำคือ อย่าใช้ประเภทข้อมูล Number-Single หรือ Double เพราะจะเก็บค่าที่ไม่ตรงกับข้อมูล โดยจะมีผิดเพี้ยนในทศนิยมตำแหน่งหลังๆได้ ควรใช้ Number-Decimal แล้วกำหนด Scale property เป็นจำนวนทศนิยมที่ต้องการเก็บ จะทำให้การคำนวนตัวเลขที่มีทศนิยมได้ตรงตามความจริง
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

29 ก.ค. 63 , 17:27:03
ตอบกลับ #10

kunlek

: รวมตัวเลขไม่ได้
« ตอบกลับ #10 เมื่อ: 29 ก.ค. 63 , 17:27:03 »
ผมใช้ Round ผลลัพธ์ไม่ถูกทั้งหมด อย่างที่ท่านว่า  ก็นึกว่าเป็นเรื่องทศนิยมยาวไป ตัดเหลือ 2 ตำแหน่ง   คงต้องไปแก้เป็น CDec(format(n,"0.00"))  แล้วคงแก้ type field table   เพราะใช้ number/double  กำหนด format/decimal  เป็น standard/decimal มาตลอด  ขอบพระคุณมากครับ

 

29 ก.ค. 63 , 19:49:57
ตอบกลับ #11

kunlek

: รวมตัวเลขไม่ได้
« ตอบกลับ #11 เมื่อ: 29 ก.ค. 63 , 19:49:57 »
มูลค่าต้นงวด: Format(CDec(([book_vul]-[ค่าเสื่อมต้นงวด]),"0.00"))  ทำไมได้ผลลัพธ์ " 0" ทั้งหมด ครับ

 

29 ก.ค. 63 , 19:58:53
ตอบกลับ #12

สันติสุข

: รวมตัวเลขไม่ได้
« ตอบกลับ #12 เมื่อ: 29 ก.ค. 63 , 19:58:53 »
CDec(Format( ))  ไม่ใช่ Format(CDec( ))
ช่วยพกถุงผ้า/ถุงพลาสติกใช้แล้วไปซื้อของเพื่อลดการใช้พลาสติก ขยะ รักษาสิ่งแวดล้อม และไม่ให้ภาวะโลกร้อนวิกฤติเร็วขึ้นกว่านี้
ช่วยคลิกโฆษณาข้างล่างนี้ เพื่อสนับสนุนเวปบอร์ดด้วยครับ
:nice day:
 


บอร์ดเรียนรู้ Access สำหรับคนไทย


 

Sitemap 1 2 3 4 5