ใช้ไวยากรณ์ SELECT ที่สามใน ADO
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-05-30 19:54:33
ต่อจากบทความที่แล้ว:
สั่งซื้อโดย
ORDER BY clause คุณสามารถตั้งค่าฟิลด์การเรียงลำดับได้
ในนิพจน์ SQL คำสั่งย่อย ORDER BY มักจะถูกวางไว้ท้ายสุด
หากคุณต้องการเรียงลำดับจากมากไปน้อย (Z~A, 9~0) คุณต้องเพิ่มคำ DESC ที่ท้ายแต่ละฟิลด์ที่คุณต้องการเรียงลำดับจากมากไปน้อย ตัวอย่างเช่น:
เลือกชื่อ
จากพนักงาน
เรียงตามเงินเดือนDESC อายุ
บ่งชี้ว่าฟิลด์ [เงินเดือน] เรียงลำดับจากมากไปหาน้อย และฟิลด์ [อายุ] เรียงลำดับจากมากไปน้อย
ฟิลด์ที่เรียงลำดับในส่วนคำสั่ง ORDER BY ไม่สามารถมีประเภทฟิลด์ MEMO หรือประเภทอ็อบเจ็กต์ OLE ได้ มิฉะนั้นจะเกิดข้อผิดพลาดขึ้น
เมื่อมีหลายฟิลด์รวมอยู่ในส่วนคำสั่ง ORDER BY ฟิลด์แรกหลังจาก ORDER BY จะถูกใช้สำหรับการเรียงลำดับ จากนั้น หากมีบันทึกข้อมูลที่เหมือนกันในช่องนี้ ระบบจะใช้ช่องที่สองเพื่อเรียงลำดับและอื่นๆ
จัดกลุ่มตาม
GROUP BY จะสร้างสถิติเกี่ยวกับผลลัพธ์ของแบบสอบถามดังนี้:
เลือกรายการเขตข้อมูล
จากตาราง
หลักเกณฑ์อยู่ที่ไหน
[จัดกลุ่มตามรายการกลุ่มฟิลด์]
เมื่อใช้ส่วนคำสั่ง WHERE คุณสามารถตั้งค่าข้อมูลที่คุณไม่ต้องการนับ และเมื่อใช้ส่วนคำสั่ง HAVING คุณสามารถกรองฟิลด์ที่ถูกนับแล้วได้
ไม่สามารถสร้างสถิติบนฟิลด์ประเภทฟิลด์ MEMO หรือประเภทวัตถุ OLE ได้ มิฉะนั้นจะเกิดข้อผิดพลาด
ตัวอย่างเช่น โปรแกรม ASP rs22.asp เป็นดังนี้ [เลือกหมวดหมู่, เฉลี่ย (ราคา) โดยเฉลี่ยจากกลุ่มผลิตภัณฑ์ตามหมวดหมู่] ใช้ GROUP BY เพื่อสร้างสถิติ [หมวดหมู่] ในผลลัพธ์การสืบค้น และคำนวณสถิติของแต่ละหมวดหมู่ เพื่อเฉลี่ยราคาเฉลี่ย (ราคา):
-
ตั้งค่า conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={ไดรเวอร์ Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
ตั้ง rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "เลือกหมวดหมู่, เฉลี่ย (ราคา) เป็นค่าเฉลี่ยจากกลุ่มผลิตภัณฑ์ตามหมวดหมู่"
Response.เขียน "<p>Avg(price)"
rs2.เปิด SqlStr,conn1,1,1
ทำในขณะที่ไม่ใช่ rs2.EOF
การตอบสนองเขียน "<BR>" & rs2("kind") & ": " & rs2("average")
rs2.MoveNext
วนซ้ำ
rs2.ปิด%>
สำหรับโปรแกรม ASP rs22.asp ข้างต้น ไคลเอนต์จะใช้เบราว์เซอร์เพื่อเรียกดูผลการดำเนินการและแสดงราคาเฉลี่ยตามสถิติ [หมวดหมู่]
ให้เราดูตัวอย่าง ตัวอย่างเช่น โปรแกรม ASP rs22.asp เป็นดังนี้ [SELECT Category, Sum(Quantity*Price) As Total From Product Group By Category] ใช้ GROUP BY เพื่อสร้างสถิติ [Category] ในแบบสอบถาม ผลลัพธ์และนับแต่ละหมวดหมู่ ผลรวมราคา (ปริมาณ * ราคา) คูณด้วยปริมาณและราคา:
-
ตั้งค่า conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={ไดรเวอร์ Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
ตั้ง rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "เลือกหมวดหมู่, ผลรวม (ปริมาณ*ราคา) รวมจากกลุ่มผลิตภัณฑ์ตามหมวดหมู่"
rs2.เปิด SqlStr,conn1,1,1
Response.เขียน "<p>Sum(quantity*price)"
ทำในขณะที่ไม่ใช่ rs2.EOF
การตอบสนองเขียน "<BR>" & rs2("category") & ": " & rs2("total")
rs2.MoveNext
วนซ้ำ
rs2.ปิด%>
สำหรับโปรแกรม ASP rs22.asp ข้างต้น ให้ใช้เบราว์เซอร์บนไคลเอนต์เพื่อเรียกดูผลการดำเนินการและแสดงราคารวมตาม [หมวดหมู่]
Groupfieldlist คือชื่อของฟิลด์ที่ใช้สำหรับสถิติ โดยมีสูงสุด 10 ฟิลด์
ลำดับของชื่อฟิลด์ในกลุ่มรายการฟิลด์จะกำหนดระดับทางสถิติจากระดับสูงสุดไปจนถึงระดับต่ำสุด
สุดท้ายนี้ เช่น โปรแกรม ASP rs22.asp เป็นดังนี้ [SELECT name, subject, Avg (score) As Average From Exam Group By name, subject] ใช้ GROUP BY เพื่อสร้างผลลัพธ์การสืบค้นตาม [name] และ [ เรื่อง] สถิติ สถิติของแต่ละคะแนนทางสถิติ [เฉลี่ย] เฉลี่ย (คะแนน):
-
ตั้งค่า conn1 = Server.CreateObject("ADODB.Connection")
conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver={ไดรเวอร์ Microsoft Access (*.mdb)};DriverId=25;FIL=MS Access;"
ตั้ง rs2 = Server.CreateObject("ADODB.Recordset")
SqlStr = "เลือกชื่อ, หัวเรื่อง, ค่าเฉลี่ย (คะแนน) เป็นค่าเฉลี่ยจากกลุ่มการสอบตามชื่อ, หัวเรื่อง"
rs2.เปิด SqlStr,conn1,1,1
Response.Write "<p>จัดกลุ่มตามชื่อ, หัวเรื่อง"
ทำในขณะที่ไม่ใช่ rs2.EOF
การตอบสนองเขียน "<BR>" & rs2("ชื่อ") & " " & rs2("Subject") & " เฉลี่ย: " & rs2("เฉลี่ย")
rs2.MoveNext
วนซ้ำ
rs2.ปิด
-
โปรแกรม ASP ข้างต้น rs22.asp ใช้เบราว์เซอร์บนฝั่งไคลเอ็นต์เพื่อเรียกดูผลการดำเนินการและแสดงคะแนน [เฉลี่ย] ตาม [ชื่อ] และ [หัวเรื่อง]
คุณได้เรียนรู้มันแล้วหรือยัง?