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

 4,553   11
URL.หัวข้อ / URL
การเรียงลำดับใน Query

รบกวนสอบถาม อ.yeadram และผู้รู้ทุกท่านครับ

SELECT (SELECT count(Emp.Emp_no) FROM Emp where emp.[emp_sale] <= seqemp.[emp_sale]) AS seq, seqemp.Emp_no, seqemp.sale, seqemp.day
FROM Emp AS seqemp
ORDER BY seqemp.Emp_sale, seqemp.Emp_day;

table emp
emp_no = รหัสพนักงาน
emp_sale = จำนวนที่ขายได้
emp_day = จำนวนวันที่ขาย

ต้องการแสดงตัวเลขเรียงลำดับใน query ถ้า จำนวนที่ขายได้เท่ากันของแต่ละคน ก็จะให้ดูว่า จำนวนวันที่ขายว่าใครน้อยกว่า ก็ให้ขึ้นก่อน แต่ ปรากฎว่า มันจะเรียงเฉพาะจำนวนขายเท่านั้นครับ ทำให้ลำดับที่ต้องการผิดพลาดไป

ขอบคุณมากครับ

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

1 @R05777
เอ.. ไม่เห็นมี Order by Emp_no เลยหละครับ
2 @R05787
ให้มันเรียงตามยอดขายครับ ถ้ายอดเท่ากันก็ดูจากวันที่ขาย ใครน้อยกว่าก็จะอยู่บนครับ

ขอบคุณมากครับ
3 @R05791
ที่ว่าไม่เรียงนี่อะไรไม่เรียงหละครับ
Seq ไม่เรียง หรือ ข้อมูลไม่เรียง
4 @R05792
seq ไม่เรียงครับ สมมุติ emp_sale เท่ากันในลำดับที่ 10 กับ 11 ก็จะแสดง
11 11
แบบนี้ครับ
ขอบคุณมากครับ
5 @R05793
ก็ถูกแล้วนี่ครับ สูตรที่เขียนไว้มันจะคืนค่าออกมาอย่างนั้น...
จริงๆสูตรที่เขียนไว้มันไม่ใช่เป็นการ run sequence ที่แท้จริง
มันเป็นการนับค่าที่น้อยกว่าหรือเท่ากันไล่มาเรื่อยเท่านั้นเอง ในเมื่อค่ามันเท่ากัน มันก็จะนับให้เท่ากันหนะสิครับ

ถ้าอยากให้มันนับไม่เท่ากัน คุณต้องใส่เงื่อนไขไปเพิ่มครับ...
6 @R05794
ลองเขียนเงื่อนไขแบบนี้ดูนะครับ
SELECT (SELECT count(Emp.Emp_no) FROM Emp where (emp.[emp_sale]*100)+emp.day <= (seqemp.[emp_sale]*100)+seqemp.day) AS seq, seqemp.Emp_no, seqemp.sale, seqemp.day
FROM Emp AS seqemp
ORDER BY seqemp.Emp_sale, seqemp.Emp_day;

7 @R05805
ขอบคุณครับ สำหรับตอบคำถาม

แต่ถ้าเป็นตัวล่าสุด ถ้านำยอดขาย + จำนวนวันที่ขาย ก็จะผิดวัตถุประสงค์ไปเลยครับ เช่น

A ขายได้ 90 +   4
B ขายได้ 85 +   9
C ขายได้ 92 +   5

สองคน A B นี้ก็จะอยู่ลำดับเดียวกัน เพราะรวมกันได้ 94 ซึ่งผิดวัตถุประสงค์ครับ

ขอบคุณมากครับ
8 @R05807
อ่านดูให้ดีซะก่อนสิครับ...
9 @R05808
ตรงไหนครับ
10 @R05810
ผมลองสร้างข้อมูลจำลอง
แล้วเอา statement ของคุณแดน ไปลองรันแล้วครับ
มีการเขียนชื่อฟิลด์ผิด 3-4 จุด ซึ่งน่าจะเป็นเพราะคุณ weezaa ให้มาแต่ต้น ก็ปรับแก้นิดหน่อย

SELECT (
SELECT count(Emp.Emp_no)
FROM Emp
where (emp.[emp_sale]*100)+emp.emp_day <= (seqemp.[emp_sale]*100)+seqemp.emp_day
) AS seq,seqemp.Emp_no, seqemp.emp_sale, seqemp.emp_day
FROM Emp AS seqemp
ORDER BY seqemp.Emp_sale, seqemp.Emp_day;


รันได้ครับ ผลงานออกมา น่าจะตรงความต้องการแล้วนะครับ ไม่ทราบคุณ weezaa ได้นำไปทดลองดูหรือยังครับ
11 @R05811
ขอบคุณทั้งสองท่านมากเลยครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3628s