กระทู้เก่าบอร์ด อ.Yeadram
1,292 6
URL.หัวข้อ /
URL
สอบถามอาจารย์ ทีครับ เกี่ยวกับ query
ตอนนี้ จะทำรายงาน Stock ครับ แต่ติดปัญหาตรง query
คือ ต้องการนำ Unit Price ของวัสดุที่รับเข้ามา ให้มาแสดงเพื่อ คำนวน มูลค่าคงเหลือทั้งหมด โดย เอาจำนวน balance* Unit price
แต่ติด ตรง ดึง unit price มาแล้ว Query แสดงผล ผิดไป
ที่อยากได้คือ
-เอา ราคาต่อหน่วย ล่าสุด ของวัสดุนั้นๆ ที่รับเข้ามา มาแสดง (วัสดุที่รับเข้ามา ราคาไม่คงที่ และซื้อจากร้านค้าคนละร้าน ราคา ก็ คงต้องเปลี่ยน)
ตาราง และ ความสัมพัน ที่เกี่ยวข้อง
คิวรี่
ที่แสดง ผล เมื่อคิวรี่
รบกวนอาจารย์ด้วยครับ งาน ใกล้จะเสร็จแล้ว เหลือแค่ ส่วนรายงานครับ
ขอบคุณมากครับ
คือ ต้องการนำ Unit Price ของวัสดุที่รับเข้ามา ให้มาแสดงเพื่อ คำนวน มูลค่าคงเหลือทั้งหมด โดย เอาจำนวน balance* Unit price
แต่ติด ตรง ดึง unit price มาแล้ว Query แสดงผล ผิดไป
ที่อยากได้คือ
-เอา ราคาต่อหน่วย ล่าสุด ของวัสดุนั้นๆ ที่รับเข้ามา มาแสดง (วัสดุที่รับเข้ามา ราคาไม่คงที่ และซื้อจากร้านค้าคนละร้าน ราคา ก็ คงต้องเปลี่ยน)
ตาราง และ ความสัมพัน ที่เกี่ยวข้อง
คิวรี่
ที่แสดง ผล เมื่อคิวรี่
รบกวนอาจารย์ด้วยครับ งาน ใกล้จะเสร็จแล้ว เหลือแค่ ส่วนรายงานครับ
ขอบคุณมากครับ
6 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R20555
แล้วใช้ Last แทน Max ไม่ได้หรือครับ
ก่อนอื่นอธิบายก่อน หลายคนเข้าใจความหมายของฟังก์ชั่น Last() ผิด แม้แต่เว็บฝรั่งที่ผมเคยอ่านยังเข้าใจผิดก็มี
Last คือ ข้อมูลเรคคอร์ดล่าสุดที่เรา Add ใหม่ขึ้นมาเท่านั้น โปรแกรมจะนับเรคคอร์ดอันที่ใหม่สุดเป็น Last
มีหลายกรณีที่ผมเคยอ่านเจอ
- พวกเค้านึกว่าการที่ Edit แก้เรคคอร์ดเดิมจะทำให้เป็น Last() แต่ไม่ใช่นะครับ เรคคอร์ดนั้นก็จะเป็นลำดับเดิมสำหรับ ฟังก์ชั่น Last()
- พวกเค้านึกว่าการแก้ ID ให้เป็นเลข มากสุดของข้อมูล ก็จะทำให้เป็น Last ซึ่งก็ไม่ใช่อีก เรคคอร์ดนั้นก็ยังเป็นเรคคอร์ดลำดับเดิม จะมีผลกับฟังก์ชั่น Max() ไม่ใช่ Last()
สรุปคือ Last() จะมีผลต่อเมื่อเป็นเรคคอร์ดใหม่เท่านั้น ในการแก้ไขข้อมูล ถ้าคุณอยากให้ Last() มีผล คือคุณต้องลบเรคคอร์ดนั้น แล้วเพิ่มเรคคอร์ดใหม่เท่านั้น
ถ้าเข้าใจหลักการของฟังก์ชั่น Last() ดีแล้ว มันก็น่าจะตอบโจทย์คุณได้นะครับ ลองดูครับ
ก่อนอื่นอธิบายก่อน หลายคนเข้าใจความหมายของฟังก์ชั่น Last() ผิด แม้แต่เว็บฝรั่งที่ผมเคยอ่านยังเข้าใจผิดก็มี
Last คือ ข้อมูลเรคคอร์ดล่าสุดที่เรา Add ใหม่ขึ้นมาเท่านั้น โปรแกรมจะนับเรคคอร์ดอันที่ใหม่สุดเป็น Last
มีหลายกรณีที่ผมเคยอ่านเจอ
- พวกเค้านึกว่าการที่ Edit แก้เรคคอร์ดเดิมจะทำให้เป็น Last() แต่ไม่ใช่นะครับ เรคคอร์ดนั้นก็จะเป็นลำดับเดิมสำหรับ ฟังก์ชั่น Last()
- พวกเค้านึกว่าการแก้ ID ให้เป็นเลข มากสุดของข้อมูล ก็จะทำให้เป็น Last ซึ่งก็ไม่ใช่อีก เรคคอร์ดนั้นก็ยังเป็นเรคคอร์ดลำดับเดิม จะมีผลกับฟังก์ชั่น Max() ไม่ใช่ Last()
สรุปคือ Last() จะมีผลต่อเมื่อเป็นเรคคอร์ดใหม่เท่านั้น ในการแก้ไขข้อมูล ถ้าคุณอยากให้ Last() มีผล คือคุณต้องลบเรคคอร์ดนั้น แล้วเพิ่มเรคคอร์ดใหม่เท่านั้น
ถ้าเข้าใจหลักการของฟังก์ชั่น Last() ดีแล้ว มันก็น่าจะตอบโจทย์คุณได้นะครับ ลองดูครับ
3 @R20556
ลองแล้วครับ แต่ยังไม่ได้ครับ เพราะ ถ้า ทำการเบิกของออก ของ unit price เราไม่ได้ใส่ คือ unit price ใส่แต่ตอน รับวัสดุเข้า อ่ะครับ
แต่ถ้าใช้ last แต่ พอ มี เรคคอดใหม่ เราทำการเบิกของ ช่อง unit price จะไม่มีค่า ครับ
แต่ถ้าใช้ last แต่ พอ มี เรคคอดใหม่ เราทำการเบิกของ ช่อง unit price จะไม่มีค่า ครับ
4 @R20557
โทษทีนะครับ ต้องขอบอกตรงๆว่า ผมจะไม่ดูโจทย์คำถามที่ต้องมาไล่วิเคราะห์ฐานข้อมูลว่าออกแบบยังไง ไม่ค่อยเก่งด้วย ประสบการณ์ออกแบบฐานข้อมูลผมก็ไม่ค่อยมาก ดูแล้วปวดหัวครับ งานผมก็ปวดหัวอยู่แล้ว ยังไงรออาจารย์ท่านอื่นแนะนำดูนะครับ
5 @R20558
หรือไม่ก็ลองสร้าง ซับคิวรี่ในคิวรี่ที่ทำ GROUP แบบนี้ดูครับ
- เขียนฟิลด์ใหม่ในคิวรี่
LastUnit: (SELECT Last(IM_Item_UnitPrice) FROM [ชื่อตาราง] AS a WHERE [ชื่อคิวรี่ที่ใช้อยู่].Item_Code = a.Item_Code AND Nz(a.IM_Item_Unit,0) <> 0)
กำหนดช่อง Total: Expression
ประมาณนี้ครับ ปรับใช้ดู
- เขียนฟิลด์ใหม่ในคิวรี่
LastUnit: (SELECT Last(IM_Item_UnitPrice) FROM [ชื่อตาราง] AS a WHERE [ชื่อคิวรี่ที่ใช้อยู่].Item_Code = a.Item_Code AND Nz(a.IM_Item_Unit,0) <> 0)
กำหนดช่อง Total: Expression
ประมาณนี้ครับ ปรับใช้ดู
6 @R20560
ขอบคุณครับ เดี๋ยว ผมจะลองทำดูครับ
Time: 0.3249s
ที่ต้องการ ให้ เหลือ วัสดุ ละ 1 บรรทัด
แบบนี้ แต่อันนี้เลือก เอาค่า max เลยได้แบบที่ต้องการ