กระทู้เก่าบอร์ด อ.Yeadram
4,561 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 ถ้า จำนวนที่ขายได้เท่ากันของแต่ละคน ก็จะให้ดูว่า จำนวนวันที่ขายว่าใครน้อยกว่า ก็ให้ขึ้นก่อน แต่ ปรากฎว่า มันจะเรียงเฉพาะจำนวนขายเท่านั้นครับ ทำให้ลำดับที่ต้องการผิดพลาดไป
ขอบคุณมากครับ
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 ไม่เรียง หรือ ข้อมูลไม่เรียง
Seq ไม่เรียง หรือ ข้อมูลไม่เรียง
4 @R05792
seq ไม่เรียงครับ สมมุติ emp_sale เท่ากันในลำดับที่ 10 กับ 11 ก็จะแสดง
11 11
แบบนี้ครับ
ขอบคุณมากครับ
11 11
แบบนี้ครับ
ขอบคุณมากครับ
5 @R05793
ก็ถูกแล้วนี่ครับ สูตรที่เขียนไว้มันจะคืนค่าออกมาอย่างนั้น...
จริงๆสูตรที่เขียนไว้มันไม่ใช่เป็นการ run sequence ที่แท้จริง
มันเป็นการนับค่าที่น้อยกว่าหรือเท่ากันไล่มาเรื่อยเท่านั้นเอง ในเมื่อค่ามันเท่ากัน มันก็จะนับให้เท่ากันหนะสิครับ
ถ้าอยากให้มันนับไม่เท่ากัน คุณต้องใส่เงื่อนไขไปเพิ่มครับ...
จริงๆสูตรที่เขียนไว้มันไม่ใช่เป็นการ 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;
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 ซึ่งผิดวัตถุประสงค์ครับ
ขอบคุณมากครับ
แต่ถ้าเป็นตัวล่าสุด ถ้านำยอดขาย + จำนวนวันที่ขาย ก็จะผิดวัตถุประสงค์ไปเลยครับ เช่น
A ขายได้ 90 + 4
B ขายได้ 85 + 9
C ขายได้ 92 + 5
สองคน A B นี้ก็จะอยู่ลำดับเดียวกัน เพราะรวมกันได้ 94 ซึ่งผิดวัตถุประสงค์ครับ
ขอบคุณมากครับ
8 @R05807
อ่านดูให้ดีซะก่อนสิครับ...
9 @R05808
ตรงไหนครับ
10 @R05810
ผมลองสร้างข้อมูลจำลอง
แล้วเอา statement ของคุณแดน ไปลองรันแล้วครับ
มีการเขียนชื่อฟิลด์ผิด 3-4 จุด ซึ่งน่าจะเป็นเพราะคุณ weezaa ให้มาแต่ต้น ก็ปรับแก้นิดหน่อย
รันได้ครับ ผลงานออกมา น่าจะตรงความต้องการแล้วนะครับ ไม่ทราบคุณ weezaa ได้นำไปทดลองดูหรือยังครับ
แล้วเอา 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
ขอบคุณทั้งสองท่านมากเลยครับ
Time: 0.4027s