กระทู้เก่าบอร์ด อ.Yeadram
        
           4,862   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.0628s
    
      
		