เรียงลำดับในคิวรี่
กระทู้เก่าบอร์ด อ.Yeadram

 4,378   11
URL.หัวข้อ / URL
เรียงลำดับในคิวรี่

อยากเรียงข้อมูลจากน้อยไปมากหรือจากมากไปน้อยดังนี้

214/2553
3/2552
3/2553
481/2554
802/2554

อันนี้คือจัดเรียงจากน้อยไปมากได้แบบนี้
802/2554
481/2554
3/2553
3/2552
214/2553

อันนี้เรียงจากมากไปน้อย
ซึ่งไม่ถูกต้อง ต้องทำใช้คำสั่งในคิวลี่แบบไหนคะในโปรแกรม access

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

1 @R11882
แล้วที่ถูกต้อง ต้องเป็นอย่างไร
2 @R11887
เออ...ความต้องการแบบไหน?
คือถ้าต้องการเรียง โดยเดาว่าหลัง / เป็นปึ ให้เรียงก่อน แล้วค่อยเรียงตัวเลขหน้าเครื่องหมายหรือเปล่า
ถ้างั้นคุณอาจต้องแยกข้อมูลในคิวรี่ก่อน อาจใช้คำสั่ง Left หรือ Right โดยใช้เครื่องหมาย / เป็นตัวกำหนด แล้วค่อยจัดเรียงที่ฟิลด์แยกข้อมูลจะง่ายกว่าครับ เช่น
ในคิวรี่ สร้างฟิลด์ใหม่ตัวที่หนึ่ง
Expr2: Left([ชื่อฟิลด์คุณ],InStr([สินค้า],"/")-1)
สร้างตัวที่สอง
Expr1: Right([ชื่อฟิลด์คุณ],4)
จากนั้นค่อยกำหนด Ascending ทั้งสองตัวแทน
แบบง่ายๆนะครับ ลองปรับดู

3 @R11903
เรามีข้อมูลอยู่ในฟิลด์ id, idk, name ชื่อตารางว่า money ข้อมูลในตารางมีดังนี้
id     idk     Name
1     1/2551     sara
2     2/2551     apple
3     10/2551     nicha

ในการจัดเรียงลำดับจากน้อยไปมากโดยใช้ idk จะได้
id     idk     Name
3     10/2551     nicha
1     1/2551     sara
2     2/2551     apple

พอเราจัดเรียงจากมากไปน้อยโดยใช้ idk ในการจัดเรียงเช่นกันเราได้
id     idk     Name
2     2/2551     Apple
1     1/2551     100
3     10/2551     362
แล้วทำไมเรียงลำดับน้อยไปมากมันได้ 10/2551 ออกมาก่อน แล้วมากไปน้อยมันได้ 2/2551 ออกมาก่อนต้องทำแบบไหนในคิวรี่นะคะ นี่แหละคือความต้องการ


4 @R11904
ดู ๆ แล้วมันเป็น Text หรือเปล่า...น่าจะเปลี่ยนชนิดเป็น Date/Time..ซึ่งอาจจะต้องดัดแปลงสมมุติข้อมูลเป็นวันเพื่อนำไปใช้งาน..คงจะเรียงได้ถูกต้อง ???
5 @R11905
อีกทีครับ ... แล้วที่ถูกต้อง ต้องเป็นอย่างไร หลักการเรียงของคุณคืออะไร แล้วที่คุณ TTT ตอบให้ไปแล้ว ไม่ตรงตามที่ต้องการหรือ
6 @R11906
คือมันเกี่ยวกับ Data Type ในการจัดเก็บครับ ลักษณะนี้แสดงว่าคุณเก็บในโครงสร้างของ Text ทำให้โปรแกรมนำค่าตัวแรกสุดมาเรียงก่อน ไม่ว่าจะเป็น 1 หรือ 10 ก็ไม่เกี่ยว เพราะตัวแรกก็คือ 1 เท่ากัน ฉะนั้นมันต้องมาก่อน 2 แน่นอน จากนั้นโปรแกรมค่อยนับตัวที่สอง..สาม เรียงตามลำดับครับ เหตุเพราะโปรแกรมมองเป็น อักขระ ไม่ใช่ Data Type แบบ Number (สังเกตุได้จากข้อมูลมี / ) หรือ Date/Time
7 @R11907
อย่างที่ อ.สันติสุข ว่าครับ ยังไงคุณก็ยังไม่ได้บอกความต้องการอยู่ดี เช่น
id     idk     Name
1     1/2551     100
2     2/2551     Apple
3     10/2551     362
แล้วถ้ามี 1/2552 จะเป็น
1     1/2551     100
-      1/2552      -
2     2/2551     Apple
3     10/2551     36
หรือ
1     1/2551     100
2     2/2551     Apple
3     10/2551     362
-      1/2552      -
8 @R11908
ออกตัวก่อนว่าไม่ได้เก่งมากนะครับ แต่เท่าที่คิดได้ตอนนี้และง่ายที่สุดไว้ทดสอบดูนะครับ
1. ที่มุมมองออกแบบคิวรี่ เลือกช่องฟิลด์ว่าง ใส่โค๊ตนี้ลงไป



(ผมไม่สามารถ Post โค๊ดนี้ได้ ไม่รู้ทำไม่ เลยใช้รูปแทนแล้วกัน)

2. เซ็ทที่ Sort เป็น Ascending (ในฟิลด์ใหม่)
3. อาจเอาเครื่องถูกออกที่ Show (ในฟิลด์ไหม่)
9 @R11911
ขออนุญาตช่วยเดานะ
ปัญหาความต้องการของคุณหนิง น่าจะอยู่ที่การเรียงลำดับข้อมูลฟิลด์ idk นะคะ

ปัญหาเดียวกับการเรียงลำดับบ้านเลขที่ ซึ่งมี เลขบ้าน และเลข /
ปกติก็จะเอาเลขบ้านเป็นหลักก่อน แล้วตามด้วยเลข /

เคยผ่านตาว่าจะต้องแยกฟิลด์ เลขบ้านกับเลข / ออกจากกันก่อน แล้วจึงสั่งเรียง
ในคิวรี่นี่แหละ จำไม่ได้แล้วอยู่ในกระทู้ไหน พยายามหาให้ ยังไม่เจอค่ะ
10 @R11913
ขอขอบพระคุณ อ.สันติสุข คุณTTT และคุณมาลีเป็นอย่างมากเลยค่ะ ที่ช่วยให้คำแนะนำ แล้วหนิงจะลองทำดูนะคะ แบบว่าหนิงไม่มีความรู้เกี่ยวกับโปรแกรมนี้เลย นี่คือครั้งแรกที่ทำ
11 @R11914
ลองไปค้นหามาให้จากที่เคยเก็บไว้นานแล้ว ลองทำดูนะคะ
โดยเพิ่มฟิลด์ใหม่ในคิวรี่เดิม เข้าไปอีก 2 ฟิลด์ ใส่โค้ดนี้ลงไปค่ะ

ฟิลด์ที่1 Expr1: IIf(InStr(1,[idk],"/")=0,Val([idk]),Val(Left([idk],InStr(1,[idk],"/")-1)))
ฟิลด์ที่2 Expr2: IIf(InStr(1,[idk],"/")=0,0,Val(Right([idk],Len([idk])-InStr(1,[idk],"/"))))




(ดูรูปตัวอย่าง) จากนั้นใช้ฟิลด์ที่สร้างใหม่นี้ เพื่อการเรียงลำดับตามที่ต้องการค่ะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3456s